bug-make
[Top][All Lists]
Advanced

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

Re: feature requests: $(__FILE__) and $(__LINE__) textual macros


From: Paul Smith
Subject: Re: feature requests: $(__FILE__) and $(__LINE__) textual macros
Date: Sat, 27 Jan 2024 14:49:52 -0500
User-agent: Evolution 3.50.3 (by Flathub.org)

On Sat, 2024-01-27 at 20:27 +0100, Basile Starynkevitch wrote:
> > It would be great if you could provide examples where these would
> > be
> > useful, especially examples that are not already covered by the
> > output
> > of the -p option to GNU Make.
> 
> make -p don't show (unfortunately) the line number in makefiles. 
> Alternatively, a runtime option for make -p (perhaps 
> --show-line-numbers) would be nice.

It definitely DOES show line numbers.  For example for a variable
definition:

  # makefile (from 'Makefile', line 361)
  PACKAGE_NAME = GNU Make

and for a rule definition:

  all: alloca.h
  #   ...
  #  recipe to execute (from 'Makefile', line 490):
          $(MAKE) $(AM_MAKEFLAGS) all-recursive

> > I'm not saying we shouldn't introduce these, although I think you
> > misunderstand how tricky it would be to use them (for example, if
> > you set:
> > 
> >       FOO = $(__LINE__)
> 
> This would be expanded at Makefile parsing time. Not at function 
> invocation time.

I'm not sure what you mean by "this".  It would be helpful to my
understanding if you used the example I provided and showed what value
you expected BAR to have: 1 or 3?  Then I could be sure I understood
what you meant.

Macros and functions in recursive variable assignments ("=") are not
expanded when the variable is defined.  They are expanded when the
variable is referenced.  For example if you have:

   bar = 1
   FOO = $(bar)
   bar = 2
   all: ; @echo $(FOO)

then the output will be "2", not "1", because $(bar) is not expanded
when FOO is defined, it's expanded when $(FOO) is expanded (in the
recipe, in this example).

Are you suggesting that $(__LINE__) would somehow be a special case and
NOT work like this?  So if I have:

  bar = 1
  FOO = $(bar) $(__LINE__)
  bar = 2
  all: ; @echo $(FOO)

the output I got would be "2 2" instead of "2 4"?

In other words, make would parse the value of FOO looking for
references to the special variables __LINE__ and __FILE__ and expand
only those, but not other macros or functions?

> If I started to implement it, I would add
> 
>    FT_ENTRY ("__LINE__",           0,  0,  0,  func__LINE__),
> 
> in GNU make's  src/function.c file.

This would almost certainly not do what you want.

> So my intuition is that this feature is easy to implement.

I don't think you're correct about that.  But any discussion of the
implementation details is premature: the behavior must be defined
first.

-- 
Paul D. Smith <psmith@gnu.org>            Find some GNU make tips at:
https://www.gnu.org                       http://make.mad-scientist.net
"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]