Injecting mercurial changeset as version information in a C executable

前端 未结 3 510
无人共我
无人共我 2020-12-30 09:38

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 wh

相关标签:
3条回答
  • 2020-12-30 09:51

    See wiki page on versioning with make

    0 讨论(0)
  • 2020-12-30 10:01

    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.

    0 讨论(0)
  • 2020-12-30 10:06

    A common way to do this is with m4_esyscmd. For example, autoconf distributes a script in build-aux which generates a version number from the git repo and invokes AC_INIT as:

    AC_INIT([GNU Autoconf], m4_esyscmd([build-aux/git-version-gen .tarball-version]), 
      [bug-autoconf@gnu.org])
    

    You can often get away without distributing the script and do something simple like:

    AC_INIT([Package name], m4_esyscmd([git describe --dirty | tr -d '\012']), 
      [bug-report-address])
    

    Instead of git-describe, use whatever command you want to generate the version number. One important detail is that it should not have a trailing newline (hence the tr following git-describe).

    A major drawback with this technique is that the version number is only generated when you run autoconf.

    0 讨论(0)
提交回复
热议问题