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>