xref: /freebsd/contrib/bmake/unit-tests/varname-dot-curdir.mk (revision e7437ae907c89bf85a99c5cbb7ddd194a1ff1354)
1# $NetBSD: varname-dot-curdir.mk,v 1.7 2020/10/08 19:09:08 rillig Exp $
2#
3# Tests for the special .CURDIR variable, which is initially set to the
4# canonical path of the current working directory, when make started.
5
6# In all normal situations, the current directory exists, and its name can
7# be resolved.  If not, make fails at startup.
8#
9# It would be possible on some systems to remove the current directory, even
10# while a process runs in it, but this is so unrealistic that it's no worth
11# testing.
12.if !exists(${.CURDIR})
13.  error
14.endif
15.if !exists(${.CURDIR}/)
16.  error
17.endif
18.if !exists(${.CURDIR}/.)
19.  error
20.endif
21.if !exists(${.CURDIR}/..)
22.  error
23.endif
24
25# Until 2020-10-04, assigning the result of a shell assignment to .CURDIR
26# tried to add the shell command ("echo /") to the .PATH instead of the
27# output of the shell command ("/").  Since "echo /" does not exist, the
28# .PATH was left unmodified.  See VarAssign_Eval.
29#
30# Since 2020-10-04, the output of the shell command is added to .PATH.
31.CURDIR!=	echo /
32.if ${.PATH:M/} != "/"
33.  error
34.endif
35
36# A normal assignment works fine, as does a substitution assignment.
37# Appending to .CURDIR does not make sense, therefore it doesn't matter that
38# this code path is buggy as well.
39.CURDIR=	/
40.if ${.PATH:M/} != "/"
41.  error
42.endif
43
44all:
45	@:;
46