# makefile for libpng for NetBSD for the standard
# make obj && make depend && make && make test
# make includes && make install
# Copyright (C) 2006 Glenn Randers-Pehrson
# Copyright (C) 2002 Patrick R.L. Welche
# For conditions of distribution and use, see copyright notice in png.h

# You should also run makefile.netbsd

LOCALBASE?=/usr/local
LIBDIR=	${LOCALBASE}/lib
MANDIR= ${LOCALBASE}/man
INCSDIR=${LOCALBASE}/include/libpng14

LIB=	png14
SHLIB_MAJOR=	0
SHLIB_MINOR=	1.4.0beta41
SRCS=	pnggccrd.c png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
		pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
		pngwtran.c pngmem.c pngerror.c pngpread.c
INCS=	png.h pngconf.h pngpriv.h
MAN=	libpng.3 libpngpf.3 png.5

CPPFLAGS+=-I${.CURDIR}

CLEANFILES+=pngtest.o pngtest

all: pngconf.h pngdefs.h

pngdefs.h:
	echo "/* pngdefs.h was built by makefile.netbsd */" > pngdefs.h
	/* if you don't want to use the intel MMX code, uncomment this */
	# echo "#define PNG_NO_MMX_CODE" >> pngdefs.h
	/* if you don't need thread safety you can uncomment this */
	# echo "#define PNG_THREAD_UNSAFE_OK" >> pngdefs.h

# We should be able to do something like this instead of the manual
# uncommenting, but it core dumps for me at the moment:
# .if ${MACHINE_ARCH} == "i386"
#   echo "#define PNG_THREAD_UNSAFE_OK" >> pngdefs.h
#   MKLINT= no
# .else
#   echo "#define PNG_NO_MMX_CODE" >> pngdefs.h
# .endif

pngtest.o:	pngtest.c
	${CC} -c ${CPPFLAGS} ${CFLAGS} ${.ALLSRC} -o ${.TARGET}

pngtest:	pngtest.o libpng.a
	${CC} ${LDFLAGS} ${.ALLSRC} -o${.TARGET} -lz -lm

test:	pngtest
	cd ${.CURDIR} && ${.OBJDIR}/pngtest

.include <bsd.lib.mk>
