Runtime version checking

There are four different command invocations we propose:

  1. mute --version
    Print out the mu2e release version. This is intended to imply a specific version of each library actually linked into mute. It does not imply a specific version for externals not actually linked into the program.
  2. mute --version
    Print out the mu2e release version, and the version of each library loaded by the given configuration.
  3. mute --samerelease
    Check to see if all the libraries loaded by the given configuration are from the same release. Report on any inconsistencies: any library not from the same release as mute itself is not consistent.
  4. mute --md5
    Print out the two MD5 codes for each library loaded by the given configuration.
There are 4 pieces of data that should be compiled into every dynamic library and executable we build (including both official builds and builds made by an individual developer in his own SVN sandbox:
  1. "V1.2" - developer codes this into a source file, can indicate compatibility
  2. MD5 hashcode - build system generated, across all source files
  3. tag - checkin number, from repository
  4. saved MD5 - generated before tag (during the tagging procedure)
    The last two items might be considered redundant, but it is useful to have them both. The saved MD5 allows us to tell that a checked-out release has been modified; the checkin number allows us to know what SVN release we're connected to. It would be inconvenient to have to map between saved MD5s and tags "by hand".

Is information across all source files per library.