2021-12-30 14:36:57 -03:00
// Copyright (c) 2012-2021 The Bitcoin Core developers
2014-10-26 03:32:29 -03:00
// Distributed under the MIT software license, see the accompanying
2012-05-18 10:02:28 -04:00
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
2012-04-06 21:06:53 -03:00
2017-11-09 21:57:53 -03:00
# include <clientversion.h>
2022-02-21 12:30:46 -03:00
# include <util/translation.h>
2012-04-06 21:06:53 -03:00
2017-11-09 21:57:53 -03:00
# include <tinyformat.h>
2014-08-21 10:11:05 -04:00
2022-02-21 12:30:46 -03:00
# include <sstream>
# include <string>
# include <vector>
2014-09-14 07:43:56 -03:00
2014-10-26 03:32:29 -03:00
/**
* Name of client reported in the ' version ' message . Report the same name
2017-09-29 03:50:30 -03:00
* for both bitcoind and bitcoin - qt , to make it harder for attackers to
2014-10-26 03:32:29 -03:00
* target servers or GUI users specifically .
*/
2012-04-06 21:06:53 -03:00
const std : : string CLIENT_NAME ( " Satoshi " ) ;
# ifdef HAVE_BUILD_INFO
2017-08-15 16:22:54 -03:00
# include <obj/build.h>
2020-05-01 17:44:26 -04:00
// 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
2012-04-06 21:06:53 -03:00
# endif
2020-05-01 18:07:34 -04:00
//! git will put "#define GIT_COMMIT_ID ..." on the next line inside archives. $Format:%n#define GIT_COMMIT_ID "%H"$
2012-04-06 21:06:53 -03:00
2020-05-01 17:44:26 -04:00
# ifdef BUILD_GIT_TAG
2020-05-01 17:48:35 -04:00
# define BUILD_DESC BUILD_GIT_TAG
# define BUILD_SUFFIX ""
2020-05-01 17:44:26 -04:00
# else
2021-08-11 15:52:29 -04:00
# define BUILD_DESC "v" PACKAGE_VERSION
# if CLIENT_VERSION_IS_RELEASE
# define BUILD_SUFFIX ""
# elif defined(BUILD_GIT_COMMIT)
2020-05-01 17:48:35 -04:00
# define BUILD_SUFFIX "-" BUILD_GIT_COMMIT
# elif defined(GIT_COMMIT_ID)
# define BUILD_SUFFIX "-g" GIT_COMMIT_ID
# else
# define BUILD_SUFFIX "-unk"
# endif
2012-04-06 21:06:53 -03:00
# endif
2014-08-21 10:11:05 -04:00
static std : : string FormatVersion ( int nVersion )
{
2020-10-22 14:59:18 -03:00
return strprintf ( " %d.%d.%d " , nVersion / 10000 , ( nVersion / 100 ) % 100 , nVersion % 100 ) ;
2014-08-21 10:11:05 -04:00
}
std : : string FormatFullVersion ( )
{
2021-08-16 02:10:34 -04:00
static const std : : string CLIENT_BUILD ( BUILD_DESC BUILD_SUFFIX ) ;
2014-08-21 10:11:05 -04:00
return CLIENT_BUILD ;
}
2018-07-24 11:59:49 -04:00
/**
* Format the subversion field according to BIP 14 spec ( https : //github.com/bitcoin/bips/blob/master/bip-0014.mediawiki)
2014-10-26 03:32:29 -03:00
*/
2014-08-21 10:11:05 -04:00
std : : string FormatSubVersion ( const std : : string & name , int nClientVersion , const std : : vector < std : : string > & comments )
{
std : : ostringstream ss ;
ss < < " / " ;
ss < < name < < " : " < < FormatVersion ( nClientVersion ) ;
if ( ! comments . empty ( ) )
2014-10-13 15:15:19 -03:00
{
std : : vector < std : : string > : : const_iterator it ( comments . begin ( ) ) ;
ss < < " ( " < < * it ;
for ( + + it ; it ! = comments . end ( ) ; + + it )
ss < < " ; " < < * it ;
ss < < " ) " ;
}
2014-08-21 10:11:05 -04:00
ss < < " / " ;
return ss . str ( ) ;
}
2022-02-21 12:30:46 -03:00
std : : string CopyrightHolders ( const std : : string & strPrefix )
{
const auto copyright_devs = strprintf ( _ ( COPYRIGHT_HOLDERS ) . translated , COPYRIGHT_HOLDERS_SUBSTITUTION ) ;
std : : string strCopyrightHolders = strPrefix + copyright_devs ;
// Make sure Bitcoin Core copyright is not removed by accident
if ( copyright_devs . find ( " Bitcoin Core " ) = = std : : string : : npos ) {
strCopyrightHolders + = " \n " + strPrefix + " The Bitcoin Core developers " ;
}
return strCopyrightHolders ;
}
std : : string LicenseInfo ( )
{
const std : : string URL_SOURCE_CODE = " <https://github.com/bitcoin/bitcoin> " ;
return CopyrightHolders ( strprintf ( _ ( " Copyright (C) %i-%i " ) . translated , 2009 , COPYRIGHT_YEAR ) + " " ) + " \n " +
" \n " +
strprintf ( _ ( " Please contribute if you find %s useful. "
" Visit %s for further information about the software. " ) . translated , PACKAGE_NAME , " < " PACKAGE_URL " > " ) +
" \n " +
strprintf ( _ ( " The source code is available from %s. " ) . translated , URL_SOURCE_CODE ) +
" \n " +
" \n " +
_ ( " This is experimental software. " ) . translated + " \n " +
strprintf ( _ ( " Distributed under the MIT software license, see the accompanying file %s or %s " ) . translated , " COPYING " , " <https://opensource.org/licenses/MIT> " ) +
" \n " ;
}