autoconf
[Top][All Lists]
Advanced

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

Re: m4 macro expansion problem


From: Zack Weinberg
Subject: Re: m4 macro expansion problem
Date: Wed, 25 Aug 2021 11:39:20 -0400
User-agent: Cyrus-JMAP/3.5.0-alpha0-1125-g685cec594c-fm-20210825.001-g685cec59

On Wed, Aug 25, 2021, at 10:49 AM, Sébastien Hinderer wrote:
> Sébastien Hinderer (2021/08/25 15:45 +0200):
> > My preference would be to have VERSION generated at the same time than
> > the configure script, i.e. during the autoconf invocation.
> >
> > Is that possible?
> >
> > I started to investigate diversions, but it felt like this kkind of
> > thing is not their real purpose. Is there another way? Perhaps macros
> > are available that let one write some content to a file directly from
> > aclocal.m4?

Unfortunately no, I believe this would require extensions to m4 itself.

Also, you should be aware that autoconf runs m4 over configure.ac several 
times, and if you use autoreconf or any of the other tools that autoreconf can 
invoke, they will run m4 over configure.ac several times more.  (I'm guessing 
you're *not* using aclocal right now since you're talking about writing code 
directly in aclocal.m4, but perhaps you are using some of the other tools.)  
The upshot is that your m4_syscmd invocation, or any use of a hypothetical 
future m4_open_file extension, will also get run several times.  This is fine 
(just wastes some cycles) as long as the operation does the exact same thing 
every time, but it's easy to write code that doesn't *quite* do the same thing 
every time and then you would have an intermittent bug.

> m4_syscmd([cat > VERSION << END_OF_VERSION_FILE
> PKG_VERSION
> 
> # Some comments about the format of version numbers
> END_OF_VERSION_FILE
> ])
> 
> To some extent it works, i.e. VERSION is indeed generated, but the
> PKG_VERSION macro is not replaced by its value.

m4_syscmd is a primitive, and it doesn't expand its argument, so you need to 
expand PKG_VERSION first:

m4_syscmd([cat > VERSION << \END_OF_VERSION_FILE
]PKG_VERSION[

# Some comments about the format of version numbers
END_OF_VERSION_FILE
])

zw



reply via email to

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