[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: vs. 3.81 and defines

Subject: RE: vs. 3.81 and defines
Date: Tue, 6 Jun 2006 12:19:32 -0500

I believe I may have misstated.  It is ok on 3.77 and 3.79 but fails on

Here is an example.
                define good
                        @echo "good define"

                define bad
                        @echo "bad define"

.PHONY : all

all :
        @echo "$@"
        @$(call good)
        @$(call bad)

> -----Original Message-----
> From: Paul Smith [mailto:address@hidden On Behalf Of Paul D. Smith
> Sent: Tuesday, June 06, 2006 12:11 PM
> Cc: address@hidden
> Subject: Re: vs. 3.81 and defines
> %% "PATTON, BILLY \(SBCSI\)" <address@hidden> writes:
>   pb> But one had
>   pb> <tab><tab>define yyy
>   pb> ...
>   pb> <tab><tab>endef
>   pb> The one above worked fine on 3.77 and 3.79,  but 3.81 
> crashes and says
>   pb> that it cannot find a matching endef
> Hm.  "Crashes"?  Typically that means it dumps core or 
> otherwise behaves
> badly.  If that happens please definitely file a bug on 
> Savannah with a
> test case.
> To know whether the above is a real error or not we'd have to see more
> details and/or a reproducible test case.  However, if the 
> behavior is as
> you say above then I suspect that this is a bug.
>   pb> Now when management asks questions like :
>   pb> 1. why wasn't this a problem before?
>   pb> 2. Will it effect all the other systems still 
> configured with 3.77 and
>   pb> 3.79.
>   pb> We need to know that it will not effect all production by making
>   pb> this change.  To my knowledge it should not effect anything,
>   pb> especially we will be changing a unique instance to make it like
>   pb> all others.  Do you agree?
> In fact, the example above I would consider a bug in your makefile.
> Even if it seems to work.
> Remember that _any_ line in a makefile that begins with a TAB is not a
> make command line, but rather a shell command script!  _ANY_ 
> line.  Make
> does not attempt to look at the contents to decide if it really looks
> like a make command or not: if the line begins with a TAB, then make
> sticks it into the command script and goes to the next line.
> There is one exception, mainly for backward-compatibility.  
> If there is
> no current target being defined, so that the line beginning with a TAB
> could not be part of a command script, rather than reporting a syntax
> error make will assume it's a make command line and process 
> it that way.
> So, in your case, AS LONG AS your defines are never in a 
> position where
> they could be considered part of a command script, prefixing them with
> TABs like this will work.
> But, if someone comes along later and makes some changes so 
> that this is
> no longer true, your makefile will fail in not-so-obvious ways.
> Rule of thumb for make sanity: NEVER, EVER use a TAB in column 1
> ANYWHERE except within a command script.
> -- 
> --------------------------------------------------------------
> -----------------
>  Paul D. Smith <address@hidden>          Find some GNU make tips at:
>  "Please remain calm...I may be mad, but I am a 
> professional." --Mad Scientist

reply via email to

[Prev in Thread] Current Thread [Next in Thread]