tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Make's empty(), defined() and .ifdef don't catch outer .for iterators



Hi forks,

Make's empty() does not catch outer .for iterators.

> % uname -a
> NetBSD myhost 10.1 NetBSD 10.1 (GENERIC) #0: Mon Dec 16 13:08:11 UTC 2024  mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/amd64/compile/GENERIC amd64
> 
> % cat Makefile.empty
> .for i in yes no
> .  if !empty(i:M[Yy][Ee][Ss])
> output+=	yes
> .  endif
> .endfor
> 
> all:
> 	@echo ${output}
> 
> % make -f Makefile.empty
> 


Debug output says:

> % make -dA -f Makefile.empty
> :
> :
> CondParser_Eval: !empty(i:M[Yy][Ee][Ss])
> Var_Parse: y(i:M[Yy][Ee][Ss]) (eval)
> Evaluating modifier ${i:M...} on value "" (eval, undefined)
> Pattern for ':M' is "[Yy][Ee][Ss]"
> ModifyWords: split "" into 1 word
> Result of ${i:M[Yy][Ee][Ss]} is "" (eval, undefined)
> :
> :

i is undefined.

defined() and .ifdef do the same.  Is this behavior intentional?


-- 
Kogule, Ryo




Home | Main Index | Thread Index | Old Index