bin/148024: Some built-in AT&T/POSIX compat make variables are broken

Garrett Cooper gcooper at FreeBSD.org
Mon Jun 21 15:30:04 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:20:53 -0700

 On Sun, Jun 20, 2010 at 8:56 PM, Garrett Cooper <gcooper at freebsd.org> wrote=
 :
 > 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 filenam=
 e
 >>>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)
 > :(...
 
     It 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.
 Thanks,
 -Garrett


More information about the freebsd-bugs mailing list