Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jun 2010 15:30:04 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.o5LFU4nh026124@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:20:53 -0700

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



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