mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Fix static initialisation order fiasco issue for Version variables
Fixes a crash that could occur if the static constructor function for the MainSettings.cpp TU happened to run before the variables in Common/Version.cpp are initialised. (This is known as the static initialisation order fiasco.) By using wrapper functions, those variables are now guaranteed to be constructed on first use.
This commit is contained in:
@ -17,28 +17,61 @@ namespace Common
|
||||
#define BUILD_TYPE_STR ""
|
||||
#endif
|
||||
|
||||
const std::string scm_rev_str = "Dolphin "
|
||||
const std::string& GetScmRevStr()
|
||||
{
|
||||
static const std::string scm_rev_str = "Dolphin "
|
||||
#if !SCM_IS_MASTER
|
||||
"[" SCM_BRANCH_STR "] "
|
||||
"[" SCM_BRANCH_STR "] "
|
||||
#endif
|
||||
|
||||
#ifdef __INTEL_COMPILER
|
||||
BUILD_TYPE_STR SCM_DESC_STR "-ICC";
|
||||
BUILD_TYPE_STR SCM_DESC_STR "-ICC";
|
||||
#else
|
||||
BUILD_TYPE_STR SCM_DESC_STR;
|
||||
BUILD_TYPE_STR SCM_DESC_STR;
|
||||
#endif
|
||||
return scm_rev_str;
|
||||
}
|
||||
|
||||
const std::string scm_rev_git_str = SCM_REV_STR;
|
||||
const std::string scm_desc_str = SCM_DESC_STR;
|
||||
const std::string scm_branch_str = SCM_BRANCH_STR;
|
||||
const std::string scm_distributor_str = SCM_DISTRIBUTOR_STR;
|
||||
const std::string scm_update_track_str = SCM_UPDATE_TRACK_STR;
|
||||
const std::string& GetScmRevGitStr()
|
||||
{
|
||||
static const std::string scm_rev_git_str = SCM_REV_STR;
|
||||
return scm_rev_git_str;
|
||||
}
|
||||
|
||||
const std::string& GetScmDescStr()
|
||||
{
|
||||
static const std::string scm_desc_str = SCM_DESC_STR;
|
||||
return scm_desc_str;
|
||||
}
|
||||
|
||||
const std::string& GetScmBranchStr()
|
||||
{
|
||||
static const std::string scm_branch_str = SCM_BRANCH_STR;
|
||||
return scm_branch_str;
|
||||
}
|
||||
|
||||
const std::string& GetScmDistributorStr()
|
||||
{
|
||||
static const std::string scm_distributor_str = SCM_DISTRIBUTOR_STR;
|
||||
return scm_distributor_str;
|
||||
}
|
||||
|
||||
const std::string& GetScmUpdateTrackStr()
|
||||
{
|
||||
static const std::string scm_update_track_str = SCM_UPDATE_TRACK_STR;
|
||||
return scm_update_track_str;
|
||||
}
|
||||
|
||||
const std::string& GetNetplayDolphinVer()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
const std::string netplay_dolphin_ver = SCM_DESC_STR " Win";
|
||||
static const std::string netplay_dolphin_ver = SCM_DESC_STR " Win";
|
||||
#elif __APPLE__
|
||||
const std::string netplay_dolphin_ver = SCM_DESC_STR " Mac";
|
||||
static const std::string netplay_dolphin_ver = SCM_DESC_STR " Mac";
|
||||
#else
|
||||
const std::string netplay_dolphin_ver = SCM_DESC_STR " Lin";
|
||||
static const std::string netplay_dolphin_ver = SCM_DESC_STR " Lin";
|
||||
#endif
|
||||
return netplay_dolphin_ver;
|
||||
}
|
||||
|
||||
} // namespace Common
|
||||
|
Reference in New Issue
Block a user