xref: /freebsd/contrib/bmake/unit-tests/varname-dot-parsedir.mk (revision 833a452e9f082a7982a31c21f0da437dbbe0a39d)
1# $NetBSD: varname-dot-parsedir.mk,v 1.6 2020/10/24 08:50:17 rillig Exp $
2#
3# Tests for the special .PARSEDIR variable, which contains the directory part
4# of the file that is currently parsed.
5
6# The .PARSEDIR may be absolute or relative, therefore there is not much that
7# can be tested here.
8.if !${.PARSEDIR:tA:M*/unit-tests}
9.  error
10.endif
11
12# During parsing, it is possible to undefine .PARSEDIR.
13# Not that anyone would ever want to do this, but there's code in parse.c,
14# function PrintLocation, that explicitly handles this situation.
15.if !defined(.PARSEDIR)
16.  error
17.endif
18.undef .PARSEDIR
19.if defined(.PARSEDIR)
20.  error
21.endif
22
23# The variable .PARSEDIR is indirectly used by the .info directive,
24# via PrintLocation.
25#
26# The .rawout file contains the full path to the current directory.
27# In the .out file, it is filtered out.
28.info At this point, .PARSEDIR is undefined.
29
30# There is absolutely no point in faking the location of the file that is
31# being parsed.  Technically, it's possible though, but only if the file
32# being parsed is a relative pathname.  See PrintLocation for details.
33.PARSEDIR=	/fake-absolute-path
34.info The location can be faked in some cases.
35
36# After including another file, .PARSEDIR is reset.
37.include "/dev/null"
38.info The location is no longer fake.
39
40all:
41	@echo At run time, .PARSEDIR is ${.PARSEDIR:Uundefined}.
42