make or kmod.mk broken
Hartmut Brandt
hartmut.brandt at dlr.de
Sat Jan 14 09:07:19 PST 2006
Max Laier wrote:
>Hi,
>
>in kmod.mk (and I believe in other places as well) we have constructs in the
>form of this: ${SOMEARRAY:M${SOMEVAR}} However, make doesn't seem to
>understand this. I don't see any traces that it ever did and I have no clue
>if it should.
>
>I might well misunderstand things (not a make guru) so here is my testcase:
>
>| STUFF= foo bar foobar
>| FOO=foo
>|
>| mtest:
>| echo ${STUFF:M${FOO}}
>
>and "$make mtest" gives:
>| echo }
>| }
>
>this clearly suggests that make is not equipped to handle the variable
>expansion here.
>
>
Looks so. I suppose that we should use VarGetPattern() in modifier_M()
in var.c to get the pattern instead of doing it by hand,
though VarGetPattern() may need to know that we're getting a shell
instead of a regexp pattern (special handling for '$' before ':').
>In any case we have to fix either kmod.mk or make.
>
>
I would prefer to fix make.
>On a related question: How can I get the actual location of a file that is
>in .PATH? All I could come up with was ${.ALLSRC:M*${MY_FILE}} which doesn't
>work as I am explaining here.
>
>
>
M*$(MY_FILE) would also match 'foobar' if MY_FILE is 'bar' which is
probably not what you want.
.IMPSRC might be what you want if you talk about an implicite rule.
harti
More information about the freebsd-current
mailing list