version.h rebuild change in stable

Cameron Simpson cs at
Sat Jun 1 23:03:55 UTC 2019

On 01Jun2019 07:18, Kevin J. McCarthy <kevin at> wrote:
>On Sat, Jun 01, 2019 at 04:36:38PM +1000, Cameron Simpson wrote:
>>If I were writing the conjectured goal above I'd probably do this:
>>mutt_version='#define MUTT_VERSION "'`sh "$(srcdir)/`'"'
>>version_h=`[ -s version.h ] && cat version.h`
>>[ "$$mutt_version" = "$$version_h" ] || echo "$$mutt_version" >version.h
>>in "configure", not in the Makefile. As a prebuilt step. Once you've 
>>got a version.h you're good.
>:-) Funnily enough that's the way it was in the first place.


>But as Vincent mentioned, the change was to save developers from having 
>to reconfigure all the time just to bump the version number.

That wasn't apparent to me before. I still think there's a case for 
putting it in "make clean". Though that again will cause a complete 
rebuild. Though it skips configure.

>>But I think what I'd really want is:
>>version.h: $(srcdir)/
>>  echo '#define MUTT_VERSION "'`sh '$?'`'"' >'$@'
>>Why _don't_ we just have this?
>I'm not a Makefile person myself.  My "fix" added the 
>prerequisite and appended to the version.h explicitly just to match 
>the target below, reldate.h.
>If there is something to be gained by using the Makefile variables I'm 
>all ears, but personally I find the recipe less readable with that way.

The only thing gained from using $? and $@ is that renaming the target 
or prerequisite doesn't require matching adjustment of the recipe. But 
the recipe is very small and I agree it is less readable with $? and $@.

Cameron Simpson <cs at>

More information about the Mutt-dev mailing list