Re: Why *** extraneous `endef'. Stop.?
Hi, define starts a macro. Everything from the start of the macro to endef is just text and is not evaluated. So your inner define is not recognised - it's just treated as text. That means that the dirst endef matches the first define and all the other endefs seem to have no corresponding define statement. In other words, you cannot nest defines like that. Also note that ifneq doesn't have any effect inside a define - it only has an effect when you $(eval) the macro. Cheers, Tim 2009/9/6 Sergey Zubkovsky serg...@gmail.com: Hi, Why the below makefile fails with the error text _Makefile:16: *** extraneous `endef'. Stop._? Thanks. #--- *define Var1 ifneq (1,1) define Var2 define Var3 endef endef endif endef .PHONY : EmptyTarget EmptyTarget : ; $(eval $(value Var1))* #--- ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make -- You could help some brave and decent people to have access to uncensored news by making a donation at: http://www.thezimbabwean.co.uk/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
Re: Why *** extraneous `endef'. Stop.?
define starts a macro. Everything from the start of the macro to endef is just text and is not evaluated. So your inner define is not recognised - it's just treated as text. That means that the dirst endef matches the first define and all the other endefs seem to have no corresponding define statement. In other words, you cannot nest defines like that. Sure you can, it is a documented feature. From the GNU make manual, (make) Defining: |You may nest `define' directives: `make' will keep track of | nested directives and report an error if they are not all properly | closed with `endef'. Note that lines beginning with tab characters | are considered part of a command script, so any `define' or `endef' | strings appearing on such a line will not be considered `make' | operators. This is more a bug than anything. ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
Why *** extraneous `endef'. Stop.?
-- Forwarded message -- From: Tim Murphy tnmur...@gmail.com Date: 2009/9/6 Subject: Re: Why *** extraneous `endef'. Stop.? To: a...@gnu.org Oh dear - sorry - I'm an idiot. All I can say is that the ifneq statement is what makes it go wrong for me. Using $(if works for me but to get the same effect as not equal you need to do some complicated stuff. It is a bug. I can only suggest a workaround: define equal $(if $(1:$2=),,$(if $(2:$1=),1)) endef define Var1 $(if $(call equal,1,1),, define Var2 define Var3 endef endef ) endef Cheers, Tim 2009/9/6 Alfred M. Szmidt a...@gnu.org: define starts a macro. Everything from the start of the macro to endef is just text and is not evaluated. So your inner define is not recognised - it's just treated as text. That means that the dirst endef matches the first define and all the other endefs seem to have no corresponding define statement. In other words, you cannot nest defines like that. Sure you can, it is a documented feature. From the GNU make manual, (make) Defining: | You may nest `define' directives: `make' will keep track of | nested directives and report an error if they are not all properly | closed with `endef'. Note that lines beginning with tab characters | are considered part of a command script, so any `define' or `endef' | strings appearing on such a line will not be considered `make' | operators. This is more a bug than anything. -- You could help some brave and decent people to have access to uncensored news by making a donation at: http://www.thezimbabwean.co.uk/ -- You could help some brave and decent people to have access to uncensored news by making a donation at: http://www.thezimbabwean.co.uk/ ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
Re: Why *** extraneous `endef'. Stop.?
It seems to me this is a bug. All will be fine if we just rewrite 'ifneq (1,1)' as 'ifeq (1,1)'. That is why I sent the question. I hope someone will add an item in the bug tracker (who know `make' better than me and will confirm this supposition). Alfred M. Szmidt wrote: define starts a macro. Everything from the start of the macro to endef is just text and is not evaluated. So your inner define is not recognised - it's just treated as text. That means that the dirst endef matches the first define and all the other endefs seem to have no corresponding define statement. In other words, you cannot nest defines like that. Sure you can, it is a documented feature. From the GNU make manual, (make) Defining: |You may nest `define' directives: `make' will keep track of | nested directives and report an error if they are not all properly | closed with `endef'. Note that lines beginning with tab characters | are considered part of a command script, so any `define' or `endef' | strings appearing on such a line will not be considered `make' | operators. This is more a bug than anything. ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
Re: Why *** extraneous `endef'. Stop.?
On Sun, Sep 6, 2009 at 8:09 AM, Sergey Zubkovskyserg...@gmail.com wrote: It seems to me this is a bug. All will be fine if we just rewrite 'ifneq (1,1)' as 'ifeq (1,1)'. That is why I sent the question. I hope someone will add an item in the bug tracker (who know `make' better than me and will confirm this supposition). Sure looks like a bug to me. Note that this has nothing to do with $(eval); it's presence in your example just confuses the issue. You can see the issue directly with this: ifneq (1,1) define var1 define var2 endef endef endif I suggest you visit http://savannah.gnu.org/projects/make and submit the bug. Philip Guenther ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make
Why *** extraneous `endef'. Stop.?
Hi, Why the below makefile fails with the error text _Makefile:16: *** extraneous `endef'. Stop._? Thanks. #--- *define Var1 ifneq (1,1) define Var2 define Var3 endef endef endif endef .PHONY : EmptyTarget EmptyTarget : ; $(eval $(value Var1))* #--- ___ Bug-make mailing list Bug-make@gnu.org http://lists.gnu.org/mailman/listinfo/bug-make