bin/148024: Some built-in AT&T/POSIX compat make variables are
broken
Garrett Cooper
gcooper at FreeBSD.org
Mon Jun 21 15:30:06 UTC 2010
The following reply was made to PR bin/148024; it has been noted by GNATS.
From: Garrett Cooper <gcooper at FreeBSD.org>
To: Garrett Cooper <gcooper at freebsd.org>
Cc: Garrett Wollman <wollman at hergotha.csail.mit.edu>, bug-followup <bug-followup at freebsd.org>
Subject: Re: bin/148024: Some built-in AT&T/POSIX compat make variables are
broken
Date: Mon, 21 Jun 2010 08:21:18 -0700
On Mon, Jun 21, 2010 at 8:20 AM, Garrett Cooper <gcooper at freebsd.org> wrote=
:
> On Sun, Jun 20, 2010 at 8:56 PM, Garrett Cooper <gcooper at freebsd.org> wro=
te:
>> On Sun, Jun 20, 2010 at 7:46 PM, Garrett Wollman
>> <wollman at hergotha.csail.mit.edu> wrote:
>>> In article
>>> <mit.lcs.mail.freebsd-bugs/201006210044.o5L0iPXK000857 at www.freebsd.org>=
,
>>> gcooper at freebsd.org writes:
>>>
>>>>foo: bar
>>>> =A0 =A0 =A0 @echo target: $@ prereq: $<
>>>>$ make -f ~/Makefile.prereq foo
>>>>target: foo prereq:
>>>>
>>>>The above invocation should have printed out:
>>>>
>>>>target: foo prereq: bar
>>>
>>> No. =A0$< is only defined for pattern rules.
>>>
>>>>$<
>>>> =A0 =A0In an inference rule, the $< macro shall evaluate to the filena=
me
>>>>whose existence allowed the inference rule to be chosen for the target.
>>>>In the .DEFAULT rule, the $< macro shall evaluate to the current target
>>>>name. The meaning of the $< macro shall be otherwise unspecified.
>>> =A0 =A0 =A0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>> =A0 =A0Ok.. this appears to be a GNU make `extension':
>>
>> $ gmake -f ~/Makefile.prereq yadda.a
>> target: yadda.a prereq: bazinga.b
>> target: yadda.a prereq:
>> target: prereq:
>> $ make -f ~/Makefile.prereq yadda.a
>> target: yadda.a prereq:
>> target: yadda.a prereq: bazinga.b
>> target: yadda.a prereq: bazinga.b
>> $ bmake -f ~/Makefile.prereq yadda.a
>> target: yadda.a prereq:
>> target: yadda.a prereq: bazinga.b
>> target: yadda.a prereq: bazinga.b
>> $ cat ~/Makefile.prereq
>> .b.a:
>> =A0 =A0 =A0 =A0echo target: $@ prereq: $<
>>
>> bazinga.b:
>>
>> yadda.a: bazinga.b
>> =A0 =A0 =A0 =A0 at echo target: $@ prereq: $<
>> =A0 =A0 =A0 =A0 at echo target: $@ prereq: $>
>> =A0 =A0 =A0 =A0 at echo target: ${.TARGET} prereq: ${.ALLSRC}
>>
>> =A0 =A0Is an inference rule the .b.a rule? POSIX doesn't properly define
>> what it is and assumes you know what's going on (lousy documentation)
>> :(...
>
> =A0 =A0It appears that the ultimate problem here is that POSIX does a
> lousy job at defining Makefiles and general purpose make terms (which
> was ultimately causing confusion at my end). I'll go prod the
> opengroup folks to improve their definitions and nomenclature.
(so basically I was asking for the bug to be closed)
More information about the freebsd-bugs
mailing list