Search code examples
cversionrevisionautoconfchangeset

Injecting mercurial changeset as version information in a C executable


I would like the executables for a project I am working on to have the latest mercurial changeset recorded so that when a user complains about buggy behavior, I can track which version they are using. Some of my executables are Python and others are compiled C. Is there a way to automate this, or can you point me to projects that exhibit solutions that I can look at?

I am using autoconf in my project... in case that makes the solution easier.

Thanks!

Setjmp


Solution

  • Add this to configure.ac:

    AM_CONDITIONAL([IS_HG_REPO], [test -d "$srcdir/.hg"])
    

    Add the following lines to Makefile.am:

    if IS_HG_REPO
    AM_CPPFLAGS = -DHGVERSION="\"$(PACKAGE) `hg parents --template 'hgid: {node|short}'`\""
    else
    AM_CPPFLAGS = -DHGVERSION=PACKAGE_STRING
    endif
    

    This will define HGVERSION as a string of the form APPNAME hgid: 24d0921ee4bd or APPNAME VERSION, if building from a release tarball.