Subject: Re: bug in handling of != in make?
To: None <tech-userlevel@NetBSD.org>
From: Roland Illig <rillig@NetBSD.org>
List: tech-userlevel
Date: 06/09/2006 15:11:40
Alan Barrett wrote:
> != is not mangling the output; "VERSION != cat file" will set
> VERSION=$NetBSD$ as expected. However, != is also not protecting the
> result from being mangled later.
You're right, I have been a little imprecise here.
> Subsequent expansion of ${VERSION} will recursively try to expand
> $N at the beginning and $<nothing> at the end. AFAIK, there's no
> way to suppress this recursive expansion. Using ${VERSION:Q} after
> VERSION!=... doesn't help because the recursive expansion happens before
> the :Q modifier is applied.
>
> The only way around it, AFAIK, is to apply a :Q modifier after the
> shell expansion but before saving the result into a variable, as in
> ${VERSION_CMD:sh:Q}.
That doesn't help either, because \$NetBSD\$ is still interpreted as
(backslash, value_of("N"), e, t, B, S, D, backslash, value_of("")).
VERSION_CMD would need a "| sed 's,\$,$$,g'" appended to it to make this
work:
VERSION_cmd= echo '$$NetBSD$$' | sed -e 's,\$$,$$$$,g'
VERSION:= ${VERSION_cmd:sh}
all:
echo ${VERSION:Q}
Roland