> if we just read the docs wrong, or if they *are* wrong.


I don't think this is clearly explained in the docs.  Suggest:



Index: doc/make.texi

===================================================================

RCS file: /sources/make/make/doc/make.texi,v

retrieving revision 1.72

diff -u -r1.72 make.texi

--- doc/make.texi 2 May 2011 15:11:23 -0000     1.72

+++ doc/make.texi 15 Aug 2011 17:32:27 -0000

@@ -3620,6 +3620,7 @@

 References}).  This occurs after make has finished reading all the

 makefiles and the target is determined to be out of date; so, the

 recipes for targets which are not rebuilt are never expanded.

+The whole recipe is expanded before the first line is executed.



 Variable and function references in recipes have identical syntax and

 semantics to references elsewhere in the makefile.  They also have the



-----Original Message-----
From: bug-make-bounces+mdorey=bluearc....@gnu.org 
[mailto:bug-make-bounces+mdorey=bluearc....@gnu.org] On Behalf Of Stefan Tauner
Sent: Sunday, August 14, 2011 12:43
To: bug-make@gnu.org
Cc: Stefan Tauner; Carl-Daniel Hailfinger
Subject: Evaluation of shell functions in recipes



hello!



please keep our CC:s because we are not subscribed.

i have found a bug in our (flashrom.org) makefile which may be a bug in

make or its documentation.

attached is a small test case makefile.



the related documentation is

http://www.gnu.org/s/hello/manual/make/Shell-Function.html

and

http://www.gnu.org/s/hello/manual/make/Reading-Makefiles.html



the problem is that the shell function runs before any other commands

(i.e. immediate).

the documentation of the shell function states:

"The commands run by calls to the shell function are run when the

function calls are expanded."

and from the "reading makefiles" section i would say that this should

be deferred i.e. the commands of the recipe should be evaluated

sequently. instead the shell functions are run first:

- 2 is written to the test file

- 4 is written to the test file (overwriting 2)

after that the normal execution starts.

this leads to the output (among other things) of "1 4 4 3 4".

the expected output is "1 <file not found> 2 3 4"



could someone please explain if the observed behavior is "right" and if

we just read the docs wrong, or if they *are* wrong.

thanks!

--

Kind regards/Mit freundlichen Grüßen, Stefan Tauner
_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to