cond-func-defined.mk revision 1.11
11.11Srillig# $NetBSD: cond-func-defined.mk,v 1.11 2023/11/19 21:47:52 rillig Exp $
21.1Srillig#
31.2Srillig# Tests for the defined() function in .if conditions.
41.1Srillig
51.3SrilligDEF=		defined
61.3Srillig${:UA B}=	variable name with spaces
71.3Srillig
81.3Srillig.if !defined(DEF)
91.5Srillig.  error
101.3Srillig.endif
111.3Srillig
121.4Srillig# Horizontal whitespace (space tab) after the opening parenthesis is ignored.
131.3Srillig.if !defined( 	DEF)
141.5Srillig.  error
151.3Srillig.endif
161.3Srillig
171.4Srillig# Horizontal whitespace (space tab) before the closing parenthesis is ignored.
181.3Srillig.if !defined(DEF 	)
191.5Srillig.  error
201.3Srillig.endif
211.3Srillig
221.3Srillig# The argument of a function must not directly contain whitespace.
231.10Srillig# expect+1: Missing closing parenthesis for defined()
241.3Srillig.if !defined(A B)
251.5Srillig.  error
261.3Srillig.endif
271.3Srillig
281.11Srillig# If necessary, the whitespace can be generated by an expression.
291.3Srillig.if !defined(${:UA B})
301.5Srillig.  error
311.3Srillig.endif
321.1Srillig
331.10Srillig# expect+1: Missing closing parenthesis for defined()
341.6Srillig.if defined(DEF
351.6Srillig.  error
361.6Srillig.else
371.6Srillig.  error
381.6Srillig.endif
391.6Srillig
401.7Srillig# Variables from .for loops are not defined.
411.7Srillig# See directive-for.mk for more details.
421.7Srillig.for var in value
431.7Srillig.  if defined(var)
441.7Srillig.    error
451.7Srillig.  else
461.11Srillig# expect+1: In .for loops, expressions for the loop variables are
471.11Srillig.    info In .for loops, expressions for the loop variables are
481.10Srillig# expect+1: substituted at evaluation time.  There is no actual variable
491.7Srillig.    info substituted at evaluation time.  There is no actual variable
501.10Srillig# expect+1: involved, even if it feels like it.
511.7Srillig.    info involved, even if it feels like it.
521.7Srillig.  endif
531.7Srillig.endfor
541.7Srillig
551.9Srillig# Neither of the conditions is true.  Before July 2020, the right-hand
561.9Srillig# condition was evaluated even though it was irrelevant.
571.9Srillig.if defined(UNDEF) && ${UNDEF:Mx} != ""
581.9Srillig.  error
591.9Srillig.endif
601.9Srillig
611.9Srilligall: .PHONY
62