You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.1 KiB
98 lines
3.1 KiB
#pragma once
|
|
|
|
#include <string>
|
|
#include <sstream>
|
|
|
|
#include <boost/optional.hpp>
|
|
|
|
namespace storm {
|
|
|
|
struct StormVersion {
|
|
/// The major version of Storm.
|
|
const static unsigned versionMajor;
|
|
|
|
/// The minor version of Storm.
|
|
const static unsigned versionMinor;
|
|
|
|
/// The patch version of Storm.
|
|
const static unsigned versionPatch;
|
|
|
|
/// The label version of Storm (might be empty).
|
|
const static std::string versionLabel;
|
|
|
|
/// Flag indicating if the version of Storm is a development version.
|
|
const static bool versionDev;
|
|
|
|
enum class VersionSource {
|
|
Git, Static
|
|
};
|
|
|
|
/// The source of the versioning information.
|
|
const static VersionSource versionSource;
|
|
|
|
/// The short hash of the git commit this build is based on
|
|
const static std::string gitRevisionHash;
|
|
|
|
/// How many commits passed since the tag was last set.
|
|
const static unsigned commitsAhead;
|
|
|
|
/// 0 iff there no files were modified in the checkout, 1 otherwise. If none, no information about dirtyness is given.
|
|
const static boost::optional<bool> dirty;
|
|
|
|
/// The system which has compiled Storm.
|
|
const static std::string systemName;
|
|
|
|
/// The system version which has compiled Storm.
|
|
const static std::string systemVersion;
|
|
|
|
/// The compiler version that was used to build Storm.
|
|
const static std::string cxxCompiler;
|
|
|
|
/// The flags that were used to build Storm.
|
|
const static std::string cxxFlags;
|
|
|
|
static std::string shortVersionString() {
|
|
std::stringstream sstream;
|
|
sstream << versionMajor << "." << versionMinor << "." << versionPatch;
|
|
if (!versionLabel.empty()) {
|
|
sstream << "-" << versionLabel;
|
|
}
|
|
if (versionDev) {
|
|
sstream << " (dev)";
|
|
}
|
|
return sstream.str();
|
|
}
|
|
|
|
static std::string longVersionString() {
|
|
std::stringstream sstream;
|
|
sstream << "Version " << shortVersionString();
|
|
if (versionSource == VersionSource::Static) {
|
|
sstream << " (derived statically)";
|
|
}
|
|
if (commitsAhead > 0) {
|
|
sstream << " (+ " << commitsAhead << " commits)";
|
|
}
|
|
if (!gitRevisionHash.empty()) {
|
|
sstream << " build from revision " << gitRevisionHash;
|
|
} else {
|
|
sstream << " built from archive";
|
|
}
|
|
if (dirty) {
|
|
if (dirty.get()) {
|
|
sstream << " (dirty)";
|
|
} else {
|
|
sstream << " (clean)";
|
|
}
|
|
} else {
|
|
sstream << " (potentially dirty)";
|
|
}
|
|
return sstream.str();
|
|
}
|
|
|
|
static std::string buildInfo() {
|
|
std::stringstream sstream;
|
|
sstream << "Compiled on " << systemName << " " << systemVersion << " using " << cxxCompiler << " with flags '" << cxxFlags << "'";
|
|
return sstream.str();
|
|
}
|
|
};
|
|
}
|