Changeset View
Changeset View
Standalone View
Standalone View
src/clientversion.cpp
// Copyright (c) 2012-2016 The Bitcoin Core developers | // Copyright (c) 2012-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <clientversion.h> | #include <clientversion.h> | ||||
#include <tinyformat.h> | #include <tinyformat.h> | ||||
/** | /** | ||||
* Name of client reported in the 'version' message. Report the same name | * Name of client reported in the 'version' message. Report the same name | ||||
* for both bitcoind and bitcoin-qt, to make it harder for attackers to | * for both bitcoind and bitcoin-qt, to make it harder for attackers to | ||||
* target servers or GUI users specifically. | * target servers or GUI users specifically. | ||||
*/ | */ | ||||
const std::string CLIENT_NAME("Bitcoin ABC"); | const std::string CLIENT_NAME("Bitcoin ABC"); | ||||
/** | |||||
* Client version number | |||||
*/ | |||||
#define CLIENT_VERSION_SUFFIX "" | |||||
/** | |||||
* The following part of the code determines the CLIENT_BUILD variable. | |||||
* Several mechanisms are used for this: | |||||
* * first, if HAVE_BUILD_INFO is defined, include build.h, a file that is | |||||
* generated by the build environment, possibly containing the output | |||||
* of git-describe in a macro called BUILD_DESC | |||||
* * secondly, if this is an exported version of the code, GIT_ARCHIVE will | |||||
* be defined (automatically using the export-subst git attribute), and | |||||
* GIT_COMMIT will contain the commit id. | |||||
* * then, three options exist for determining CLIENT_BUILD: | |||||
* * if BUILD_DESC is defined, use that literally (output of git-describe) | |||||
* * if not, but GIT_COMMIT is defined, use | |||||
* v[maj].[min].[rev].[build]-g[commit] | |||||
* * otherwise, use v[maj].[min].[rev].[build]-unk | |||||
* finally CLIENT_VERSION_SUFFIX is added | |||||
*/ | |||||
//! First, include build.h if requested | |||||
#ifdef HAVE_BUILD_INFO | #ifdef HAVE_BUILD_INFO | ||||
#include <obj/build.h> | #include <obj/build.h> | ||||
// The <obj/build.h>, which is generated by the build environment | |||||
// (share/genbuild.sh), could contain only one line of the following: | |||||
// - "#define BUILD_GIT_TAG ...", if the top commit is tagged | |||||
// - "#define BUILD_GIT_COMMIT ...", if the top commit is not tagged | |||||
// - "// No build information available", if proper git information is not | |||||
// available | |||||
#endif | #endif | ||||
//! git will put "#define GIT_ARCHIVE 1" on the next line inside archives. | //! git will put "#define GIT_COMMIT_ID ..." on the next line inside archives. | ||||
//! $Format:%n#define GIT_ARCHIVE 1$ | //! $Format:%n#define GIT_COMMIT_ID "%H"$ | ||||
#ifdef GIT_ARCHIVE | |||||
#define GIT_COMMIT_ID "$Format:%h$" | |||||
#define GIT_COMMIT_DATE "$Format:%cD$" | |||||
#endif | |||||
#define BUILD_DESC_WITH_SUFFIX(maj, min, rev, suffix) \ | |||||
"v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE( \ | |||||
rev) "-" DO_STRINGIZE(suffix) | |||||
#define BUILD_DESC_FROM_COMMIT(maj, min, rev, commit) \ | |||||
"v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE( \ | |||||
rev) "-g" commit | |||||
#define BUILD_DESC_FROM_UNKNOWN(maj, min, rev) \ | |||||
"v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(rev) "-unk" | |||||
#ifndef BUILD_DESC | #ifdef BUILD_GIT_TAG | ||||
#ifdef BUILD_SUFFIX | #define BUILD_DESC BUILD_GIT_TAG | ||||
#define BUILD_SUFFIX "" | |||||
#else | |||||
#define BUILD_DESC \ | #define BUILD_DESC \ | ||||
BUILD_DESC_WITH_SUFFIX(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, \ | "v" STRINGIZE(CLIENT_VERSION_MAJOR) "." STRINGIZE(CLIENT_VERSION_MINOR) "." STRINGIZE( \ | ||||
CLIENT_VERSION_REVISION, BUILD_SUFFIX) | CLIENT_VERSION_REVISION) "." STRINGIZE(CLIENT_VERSION_BUILD) | ||||
#ifdef BUILD_GIT_COMMIT | |||||
#define BUILD_SUFFIX "-" BUILD_GIT_COMMIT | |||||
#elif defined(GIT_COMMIT_ID) | #elif defined(GIT_COMMIT_ID) | ||||
#define BUILD_DESC \ | #define BUILD_SUFFIX "-g" GIT_COMMIT_ID | ||||
BUILD_DESC_FROM_COMMIT(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, \ | |||||
CLIENT_VERSION_REVISION, GIT_COMMIT_ID) | |||||
#else | #else | ||||
#define BUILD_DESC \ | #define BUILD_SUFFIX "-unk" | ||||
BUILD_DESC_FROM_UNKNOWN(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, \ | |||||
CLIENT_VERSION_REVISION) | |||||
#endif | #endif | ||||
#endif | #endif | ||||
const std::string CLIENT_BUILD(BUILD_DESC CLIENT_VERSION_SUFFIX); | const std::string CLIENT_BUILD(BUILD_DESC BUILD_SUFFIX); | ||||
static std::string FormatVersion(int nVersion) { | static std::string FormatVersion(int nVersion) { | ||||
if (nVersion % 100 == 0) { | if (nVersion % 100 == 0) { | ||||
return strprintf("%d.%d.%d", nVersion / 1000000, | return strprintf("%d.%d.%d", nVersion / 1000000, | ||||
(nVersion / 10000) % 100, (nVersion / 100) % 100); | (nVersion / 10000) % 100, (nVersion / 100) % 100); | ||||
} else { | } else { | ||||
return strprintf("%d.%d.%d.%d", nVersion / 1000000, | return strprintf("%d.%d.%d.%d", nVersion / 1000000, | ||||
(nVersion / 10000) % 100, (nVersion / 100) % 100, | (nVersion / 10000) % 100, (nVersion / 100) % 100, | ||||
Show All 28 Lines |