Home | History | Annotate | Line # | Download | only in unit-tests
      1  1.12  rillig # $NetBSD: var-recursive.mk,v 1.12 2025/04/13 09:29:33 rillig Exp $
      2   1.1  rillig #
      3   1.8  rillig # Tests for expressions that refer to themselves and thus cannot be
      4   1.8  rillig # evaluated, as that would lead to an endless loop.
      5   1.1  rillig 
      6   1.8  rillig .if make(loadtime)
      7   1.1  rillig 
      8   1.8  rillig DIRECT=	${DIRECT}	# Defining a recursive variable is not an error.
      9  1.10  rillig # expect+2: Variable DIRECT is recursive.
     10   1.8  rillig # expect+1: <>
     11   1.8  rillig .  info <${DIRECT}>	# But expanding such a variable is an error.
     12   1.1  rillig 
     13   1.1  rillig 
     14   1.1  rillig # The chain of variables that refer to each other may be long.
     15   1.1  rillig INDIRECT1=	${INDIRECT2}
     16   1.1  rillig INDIRECT2=	${INDIRECT1}
     17  1.10  rillig # expect+2: Variable INDIRECT1 is recursive.
     18   1.8  rillig # expect+1: <>
     19   1.8  rillig .  info <${INDIRECT1}>
     20   1.1  rillig 
     21   1.1  rillig 
     22   1.1  rillig # The variable refers to itself, but only in the branch of a condition that
     23   1.8  rillig # is not satisfied and is thus not evaluated.
     24   1.1  rillig CONDITIONAL=	${1:?ok:${CONDITIONAL}}
     25   1.8  rillig # expect+1: <ok>
     26   1.8  rillig .  info <${CONDITIONAL}>
     27   1.8  rillig 
     28   1.8  rillig 
     29   1.8  rillig # An expression with modifiers is skipped halfway.  This can lead to wrong
     30   1.8  rillig # follow-up error messages, but recursive variables occur seldom.
     31   1.8  rillig MODIFIERS=	${MODIFIERS:Mpattern}
     32  1.10  rillig # expect+2: Variable MODIFIERS is recursive.
     33   1.8  rillig # expect+1: <Mpattern}>
     34   1.8  rillig .  info <${MODIFIERS}>
     35   1.1  rillig 
     36   1.2  rillig 
     37   1.2  rillig # Short variable names can be expanded using the short-hand $V notation,
     38   1.2  rillig # which takes a different code path in Var_Parse for parsing the variable
     39   1.2  rillig # name.  Ensure that these are checked as well.
     40   1.2  rillig V=	$V
     41  1.10  rillig # expect+2: Variable V is recursive.
     42   1.8  rillig # expect+1: <>
     43   1.8  rillig .  info <$V>
     44   1.2  rillig 
     45   1.8  rillig .elif make(runtime)
     46   1.3  rillig 
     47   1.3  rillig VAR=	${VAR}
     48   1.8  rillig runtime:
     49   1.9  rillig # expect: : before-recursive
     50   1.9  rillig 	: before-recursive
     51  1.10  rillig # expect: make: Variable VAR is recursive.
     52  1.12  rillig # expect-not-matches: ^: recursive%-line%-before
     53  1.12  rillig # expect-not-matches: ^: recursive%-line%-after
     54   1.9  rillig 	: recursive-line-before <${VAR}> recursive-line-after
     55  1.12  rillig # expect-not-matches: ^: after%-recursive
     56   1.9  rillig 	: after-recursive
     57   1.3  rillig 
     58   1.1  rillig .else
     59   1.1  rillig 
     60   1.1  rillig all:
     61   1.8  rillig 	@${MAKE} -f ${MAKEFILE} loadtime || echo "sub-exit status $$?"
     62   1.8  rillig 	@${MAKE} -f ${MAKEFILE} runtime || echo "sub-exit status $$?"
     63   1.8  rillig 
     64   1.8  rillig .endif
     65