Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jun 2010 15:30:06 GMT
From:      Garrett Cooper <gcooper@FreeBSD.org>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/148024: Some built-in AT&T/POSIX compat make variables are  broken
Message-ID:  <201006211530.o5LFU6Pn026264@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

The following reply was made to PR bin/148024; it has been noted by GNATS.

From: Garrett Cooper <gcooper@FreeBSD.org>
To: Garrett Cooper <gcooper@freebsd.org>
Cc: Garrett Wollman <wollman@hergotha.csail.mit.edu>, bug-followup <bug-followup@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@freebsd.org> wrote=
 :
 > On Sun, Jun 20, 2010 at 8:56 PM, Garrett Cooper <gcooper@freebsd.org> wro=
 te:
 >> On Sun, Jun 20, 2010 at 7:46 PM, Garrett Wollman
 >> <wollman@hergotha.csail.mit.edu> wrote:
 >>> In article
 >>> <mit.lcs.mail.freebsd-bugs/201006210044.o5L0iPXK000857@www.freebsd.org>=
 ,
 >>> gcooper@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@echo target: $@ prereq: $<
 >> =A0 =A0 =A0 =A0@echo target: $@ prereq: $>
 >> =A0 =A0 =A0 =A0@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)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006211530.o5LFU6Pn026264>