Makefile revision 1.79
11.79Srillig#	$NetBSD: Makefile,v 1.79 2020/08/03 20:26:09 rillig Exp $
21.8Schristos#	@(#)Makefile	5.2 (Berkeley) 12/28/90
31.1Scgd
41.1ScgdPROG=	make
51.74SrilligSRCS=	arch.c buf.c compat.c cond.c dir.c for.c hash.c job.c lst.c main.c
61.70SrilligSRCS+=	make.c make_malloc.c metachar.c parse.c
71.72SrilligSRCS+=	str.c strlist.c suff.c targ.c trace.c var.c util.c
81.40Sdsl
91.73SrilligUSE_COVERAGE?=	no		# works only with gcc; clang9 fails to link
101.73Srillig.if ${USE_COVERAGE} == "yes"
111.77SrilligCOPTS+=		--coverage -O0 -ggdb
121.77SrilligLDADD+=		--coverage
131.73SrilligCLEANFILES+=	${SRCS:.c=.gcda} ${SRCS:.c=.gcno} ${SRCS:=.gcov}
141.73Srillig.endif
151.73Srillig
161.77SrilligUSE_UBSAN?=	no
171.77Srillig.if ${USE_UBSAN} == "yes"
181.77SrilligCOPTS+=		-fsanitize=undefined
191.77SrilligLDADD+=		-fsanitize=undefined
201.77Srillig.endif
211.77Srillig
221.71SrilligUSE_META?=	yes
231.51Ssjg.if ${USE_META:tl} != "no"
241.68Sriastrad
251.71SrilligSRCS+=		meta.c
261.71SrilligCPPFLAGS+=	-DUSE_META
271.68Sriastrad
281.71SrilligUSE_FILEMON?=	ktrace
291.72Srillig.  if ${USE_FILEMON:tl} != "no"
301.68Sriastrad
311.67Sriastrad.PATH:	${.CURDIR}/filemon
321.71SrilligSRCS+=		filemon_${USE_FILEMON}.c
331.71SrilligCPPFLAGS+=	-DUSE_FILEMON
341.71SrilligCPPFLAGS+=	-DUSE_FILEMON_${USE_FILEMON:tu}
351.68Sriastrad
361.72Srillig.    if ${USE_FILEMON} == "dev"
371.71SrilligFILEMON_H?=	/usr/include/dev/filemon/filemon.h
381.72Srillig.      if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h"
391.71SrilligCOPTS.filemon_dev.c+= \
401.71Srillig		-DHAVE_FILEMON_H -I${FILEMON_H:H}
411.72Srillig.      endif
421.72Srillig.    endif
431.72Srillig.  endif
441.65Smaxv.endif
451.51Ssjg
461.60SchristosSUBDIR.roff+=	PSD.doc
471.29Ssjg.if make(obj) || make(clean)
481.71SrilligSUBDIR+=	unit-tests
491.29Ssjg.endif
501.1Scgd
511.75Srillig${SRCS:M*.c:.c=.o}: buf.h config.h dir.h hash.h job.h lst.h make.h make_malloc.h
521.75Srillig${SRCS:M*.c:.c=.o}: meta.h metachar.h nonints.h pathnames.h sprite.h strlist.h trace.h
531.75Srillig
541.1Scgd.include <bsd.prog.mk>
551.16Smycroft.include <bsd.subdir.mk>
561.24Ssjg
571.71SrilligCPPFLAGS+=	-DMAKE_NATIVE
581.71SrilligCOPTS.var.c+=	-Wno-cast-qual
591.71SrilligCOPTS.job.c+=	-Wno-format-nonliteral
601.71SrilligCOPTS.parse.c+=	-Wno-format-nonliteral
611.71SrilligCOPTS.var.c+=	-Wno-format-nonliteral
621.29Ssjg
631.72Srillig.if defined(TOOLDIR)
641.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc.
651.71SrilligCPPFLAGS+=	-DUSE_EMALLOC
661.71SrilligLDADD+=		-lutil
671.71SrilligDPADD+=		${LIBUTIL}
681.38Schristos.endif
691.37Schristos
701.63SmrgCOPTS.arch.c+=	${GCC_NO_FORMAT_TRUNCATION}
711.63SmrgCOPTS.dir.c+=	${GCC_NO_FORMAT_TRUNCATION}
721.63SmrgCOPTS.main.c+=	${GCC_NO_FORMAT_TRUNCATION} ${GCC_NO_STRINGOP_TRUNCATION}
731.63SmrgCOPTS.meta.c+=	${GCC_NO_FORMAT_TRUNCATION}
741.63SmrgCOPTS.parse.c+=	${GCC_NO_FORMAT_TRUNCATION}
751.61Smrg
761.79SrilligCOPTS+=		-Wdeclaration-after-statement
771.79Srillig
781.29Ssjg# A simple unit-test driver to help catch regressions
791.73Srilligtest: .MAKE
801.73Srillig	cd ${.CURDIR}/unit-tests \
811.73Srillig	&& MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET}
821.73Srillig.if ${USE_COVERAGE} == yes
831.73Srillig	gcov ${SRCS}
841.78Srillig	sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov
851.73Srillig.endif
861.73Srillig
871.73Srilligaccept: .MAKE
881.73Srillig	cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET}
891.76Srillig
901.76Srilligretest:
911.76Srillig	${.MAKE} -C ${.CURDIR}/unit-tests cleandir
921.76Srillig.if ${USE_COVERAGE} == yes
931.76Srillig	rm -f *.gcov *.gcda
941.76Srillig.endif
951.76Srillig	${.MAKE} test
96