1# $NetBSD: meta-ignore.inc,v 1.2 2023/02/25 19:30:32 sjg Exp $
2
3# common logic for testing .MAKE.META.IGNORE_*
4
5# we want a directory outside of .OBJDIR to drop a file
6# that our meta file refers to.
7# Note: these tests will not work if TMPDIR is /tmp or /var/tmp
8# or a subdir thereof
9IGNORE:= ${TMPDIR}/ignore
10OBJ:=	${TMPDIR}/obj
11
12# this is always ignored so make sure it isn't used above
13TMPDIR= /tmp/nothanks
14
15all:	one two three
16
17setup:
18	@mkdir -p ${IGNORE} ${OBJ}
19	@echo > ${IGNORE}/check
20	@rm -f ${OBJ}/check-ignore
21
22makefile:= ${.INCLUDEDFROMDIR}/${.INCLUDEDFROMFILE}
23TEST:= ${.INCLUDEDFROMFILE:R:C,.*meta-,,:S,-,_,g:tu}
24
25DESC.one= Initialize check-ignore.meta
26DESC.two= Use .MAKE.META.${TEST} - check-ignore is up to date
27DESC.three= Skip .MAKE.META.${TEST} - check-ignore is out of date
28
29# just in case someone runs us with -jN
30.ORDER: one two three
31one two three: .MAKE setup
32	@echo "${DESC.${.TARGET}}"; \
33	${MAKE} -C ${.CURDIR} -f ${makefile} check-ignore parent=${.TARGET}
34
35.if make(check-ignore)
36.MAKEFLAGS: -dM
37.MAKE.MODE = meta verbose silent=yes
38.OBJDIR: ${OBJ}
39.if ${parent} == "two"
40.if ${TEST} == "IGNORE_PATHS"
41# this is a prefix list - any path that matches
42# one of these prefixes will be ignored
43.MAKE.META.IGNORE_PATHS = ${IGNORE}
44.elif ${TEST} == "IGNORE_PATTERNS"
45# more flexible but more expensive
46# this example is equivalent to M*/ignore/*
47# a match means ignore
48.MAKE.META.IGNORE_PATTERNS = */ignore/*
49.elif ${TEST} == "IGNORE_FILTER"
50# this is the most flexible, but also most expensive
51# if this expands to nothing - ignore the path
52.MAKE.META.IGNORE_FILTER = N${IGNORE}/*
53.endif
54.endif
55
56# : < just reads from ${IGNORE}/check
57# so that our filemon trace will have a reference to it
58# we ensure it is always newer than the target.
59check-ignore: .META .NOPATH
60	@: < ${IGNORE}/check > ${.TARGET}
61	@sleep 1; echo ${.TARGET} > ${IGNORE}/check
62
63.endif
64