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

# You should also run makefile.ne0bsd

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

LIB=	png
SHLIB_MAJOR=	3
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>
