Makefile revision 1.80
11.80Srillig#	$NetBSD: Makefile,v 1.80 2020/08/06 05:27:31 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.80Srillig# Whether to generate a coverage report after running the tests.
101.73SrilligUSE_COVERAGE?=	no		# works only with gcc; clang9 fails to link
111.73Srillig.if ${USE_COVERAGE} == "yes"
121.77SrilligCOPTS+=		--coverage -O0 -ggdb
131.77SrilligLDADD+=		--coverage
141.73SrilligCLEANFILES+=	${SRCS:.c=.gcda} ${SRCS:.c=.gcno} ${SRCS:=.gcov}
151.73Srillig.endif
161.73Srillig
171.80Srillig# Whether to compile using the Undefined Behavior Sanitizer (GCC, Clang).
181.77SrilligUSE_UBSAN?=	no
191.77Srillig.if ${USE_UBSAN} == "yes"
201.77SrilligCOPTS+=		-fsanitize=undefined
211.77SrilligLDADD+=		-fsanitize=undefined
221.77Srillig.endif
231.77Srillig
241.71SrilligUSE_META?=	yes
251.51Ssjg.if ${USE_META:tl} != "no"
261.68Sriastrad
271.71SrilligSRCS+=		meta.c
281.71SrilligCPPFLAGS+=	-DUSE_META
291.68Sriastrad
301.71SrilligUSE_FILEMON?=	ktrace
311.72Srillig.  if ${USE_FILEMON:tl} != "no"
321.68Sriastrad
331.67Sriastrad.PATH:	${.CURDIR}/filemon
341.71SrilligSRCS+=		filemon_${USE_FILEMON}.c
351.71SrilligCPPFLAGS+=	-DUSE_FILEMON
361.71SrilligCPPFLAGS+=	-DUSE_FILEMON_${USE_FILEMON:tu}
371.68Sriastrad
381.72Srillig.    if ${USE_FILEMON} == "dev"
391.71SrilligFILEMON_H?=	/usr/include/dev/filemon/filemon.h
401.72Srillig.      if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h"
411.71SrilligCOPTS.filemon_dev.c+= \
421.71Srillig		-DHAVE_FILEMON_H -I${FILEMON_H:H}
431.72Srillig.      endif
441.72Srillig.    endif
451.72Srillig.  endif
461.65Smaxv.endif
471.51Ssjg
481.60SchristosSUBDIR.roff+=	PSD.doc
491.29Ssjg.if make(obj) || make(clean)
501.71SrilligSUBDIR+=	unit-tests
511.29Ssjg.endif
521.1Scgd
531.75Srillig${SRCS:M*.c:.c=.o}: buf.h config.h dir.h hash.h job.h lst.h make.h make_malloc.h
541.75Srillig${SRCS:M*.c:.c=.o}: meta.h metachar.h nonints.h pathnames.h sprite.h strlist.h trace.h
551.75Srillig
561.80SrilligTARGETS+=	retest
571.80Srillig
581.1Scgd.include <bsd.prog.mk>
591.16Smycroft.include <bsd.subdir.mk>
601.24Ssjg
611.71SrilligCPPFLAGS+=	-DMAKE_NATIVE
621.71SrilligCOPTS.var.c+=	-Wno-cast-qual
631.71SrilligCOPTS.job.c+=	-Wno-format-nonliteral
641.71SrilligCOPTS.parse.c+=	-Wno-format-nonliteral
651.71SrilligCOPTS.var.c+=	-Wno-format-nonliteral
661.29Ssjg
671.72Srillig.if defined(TOOLDIR)
681.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc.
691.71SrilligCPPFLAGS+=	-DUSE_EMALLOC
701.71SrilligLDADD+=		-lutil
711.71SrilligDPADD+=		${LIBUTIL}
721.38Schristos.endif
731.37Schristos
741.63SmrgCOPTS.arch.c+=	${GCC_NO_FORMAT_TRUNCATION}
751.63SmrgCOPTS.dir.c+=	${GCC_NO_FORMAT_TRUNCATION}
761.63SmrgCOPTS.main.c+=	${GCC_NO_FORMAT_TRUNCATION} ${GCC_NO_STRINGOP_TRUNCATION}
771.63SmrgCOPTS.meta.c+=	${GCC_NO_FORMAT_TRUNCATION}
781.63SmrgCOPTS.parse.c+=	${GCC_NO_FORMAT_TRUNCATION}
791.61Smrg
801.79SrilligCOPTS+=		-Wdeclaration-after-statement
811.79Srillig
821.29Ssjg# A simple unit-test driver to help catch regressions
831.73Srilligtest: .MAKE
841.73Srillig	cd ${.CURDIR}/unit-tests \
851.73Srillig	&& MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET}
861.73Srillig.if ${USE_COVERAGE} == yes
871.73Srillig	gcov ${SRCS}
881.78Srillig	sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov
891.73Srillig.endif
901.73Srillig
911.73Srilligaccept: .MAKE
921.73Srillig	cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET}
931.76Srillig
941.76Srilligretest:
951.76Srillig	${.MAKE} -C ${.CURDIR}/unit-tests cleandir
961.76Srillig.if ${USE_COVERAGE} == yes
971.76Srillig	rm -f *.gcov *.gcda
981.76Srillig.endif
991.76Srillig	${.MAKE} test
100