Core/Common: Add a generic config helper to access built-in overwriteable paths.

* Adds CMAKE_COMMAND and CMAKE_BINARY_DIR to revision_data.h
* Move the source and mysql exe path handling out of the DBUpdater.
* Make some Config methods const for correctness.
* Remove C & CXX flags from revision_data.h
 (was unused and didn't capture all cxx vars)
* Reorder the link order to prevent `ld` from ignoring the file
* Ref #15671
This commit is contained in:
Naios
2016-02-21 15:52:42 +01:00
parent 5534915f74
commit 719159e207
13 changed files with 190 additions and 92 deletions

View File

@@ -3,7 +3,9 @@
#define _HASH "@rev_hash@"
#define _DATE "@rev_date@"
#define _BRANCH "@rev_branch@"
#define _CMAKE_COMMAND "@CMAKE_COMMAND@"
#define _SOURCE_DIRECTORY "@CMAKE_SOURCE_DIR@"
#define _BUILD_DIRECTORY "@BUILDDIR@"
#define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@"
#define _FULL_DATABASE "TDB_full_world_6.03_2015_11_08.sql"
#define _HOTFIXES_DATABASE "TDB_full_hotfixes_6.03_2015_11_08.sql"
@@ -13,6 +15,4 @@
#define VER_FILEVERSION_STR "@rev_hash@ @rev_date@ (@rev_branch@ branch)"
#define VER_PRODUCTVERSION VER_FILEVERSION
#define VER_PRODUCTVERSION_STR VER_FILEVERSION_STR
#define COMPILER_C_FLAGS "@CMAKE_C_FLAGS@"
#define COMPILER_CXX_FLAGS "@CMAKE_CXX_FLAGS@"
#endif // __REVISION_DATA_H__

View File

@@ -0,0 +1,52 @@
/*
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "BuiltInConfig.h"
#include "Config.h"
#include "GitRevision.h"
template<typename Fn>
static std::string GetStringWithDefaultValueFromFunction(
std::string const& key, Fn getter)
{
std::string const value = sConfigMgr->GetStringDefault(key, "");
return value.empty() ? getter() : value;
}
std::string BuiltInConfig::GetCMakeCommand()
{
return GetStringWithDefaultValueFromFunction(
"CMakeCommand", GitRevision::GetCMakeCommand);
}
std::string BuiltInConfig::GetBuildDirectory()
{
return GetStringWithDefaultValueFromFunction(
"BuildDirectory", GitRevision::GetBuildDirectory);
}
std::string BuiltInConfig::GetSourceDirectory()
{
return GetStringWithDefaultValueFromFunction(
"SourceDirectory", GitRevision::GetSourceDirectory);
}
std::string BuiltInConfig::GetMySQLExecutable()
{
return GetStringWithDefaultValueFromFunction(
"MySQLExecutable", GitRevision::GetMySQLExecutable);
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef BUILT_IN_CONFIG_H
#define BUILT_IN_CONFIG_H
#include <string>
/// Provides helper functions to access built-in values
/// which can be overwritten in config
namespace BuiltInConfig
{
/// Returns the CMake command when any is specified in the config,
/// returns the built-in path otherwise
std::string GetCMakeCommand();
/// Returns the build directory path when any is specified in the config,
/// returns the built-in one otherwise
std::string GetBuildDirectory();
/// Returns the source directory path when any is specified in the config,
/// returns the built-in one otherwise
std::string GetSourceDirectory();
/// Returns the path to the mysql executable (`mysql`) when any is specified
/// in the config, returns the built-in one otherwise
std::string GetMySQLExecutable();
} // namespace BuiltInConfig
#endif // BUILT_IN_CONFIG_H

View File

@@ -62,7 +62,7 @@ bool ConfigMgr::Reload(std::string& error)
return LoadInitial(_filename, error);
}
std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def)
std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def) const
{
std::string value = _config.get<std::string>(ptree::path_type(name, '/'), def);
@@ -71,7 +71,7 @@ std::string ConfigMgr::GetStringDefault(std::string const& name, const std::stri
return value;
}
bool ConfigMgr::GetBoolDefault(std::string const& name, bool def)
bool ConfigMgr::GetBoolDefault(std::string const& name, bool def) const
{
try
{
@@ -85,12 +85,12 @@ bool ConfigMgr::GetBoolDefault(std::string const& name, bool def)
}
}
int ConfigMgr::GetIntDefault(std::string const& name, int def)
int ConfigMgr::GetIntDefault(std::string const& name, int def) const
{
return _config.get<int>(ptree::path_type(name, '/'), def);
}
float ConfigMgr::GetFloatDefault(std::string const& name, float def)
float ConfigMgr::GetFloatDefault(std::string const& name, float def) const
{
return _config.get<float>(ptree::path_type(name, '/'), def);
}

View File

@@ -41,10 +41,10 @@ public:
bool Reload(std::string& error);
std::string GetStringDefault(std::string const& name, const std::string& def);
bool GetBoolDefault(std::string const& name, bool def);
int GetIntDefault(std::string const& name, int def);
float GetFloatDefault(std::string const& name, float def);
std::string GetStringDefault(std::string const& name, const std::string& def) const;
bool GetBoolDefault(std::string const& name, bool def) const;
int GetIntDefault(std::string const& name, int def) const;
float GetFloatDefault(std::string const& name, float def) const;
std::string const& GetFilename();
std::list<std::string> GetKeysByString(std::string const& name);

View File

@@ -17,6 +17,16 @@ char const* GitRevision::GetBranch()
return _BRANCH;
}
char const* GitRevision::GetCMakeCommand()
{
return _CMAKE_COMMAND;
}
char const* GitRevision::GetBuildDirectory()
{
return _BUILD_DIRECTORY;
}
char const* GitRevision::GetSourceDirectory()
{
return _SOURCE_DIRECTORY;
@@ -71,13 +81,3 @@ char const* GitRevision::GetProductVersionStr()
{
return VER_PRODUCTVERSION_STR;
}
char const* GitRevision::GetCompilerCFlags()
{
return COMPILER_C_FLAGS;
}
char const* GitRevision::GetCompilerCXXFlags()
{
return COMPILER_CXX_FLAGS;
}

View File

@@ -25,6 +25,8 @@ namespace GitRevision
char const* GetHash();
char const* GetDate();
char const* GetBranch();
char const* GetCMakeCommand();
char const* GetBuildDirectory();
char const* GetSourceDirectory();
char const* GetMySQLExecutable();
char const* GetFullDatabase();
@@ -34,8 +36,6 @@ namespace GitRevision
char const* GetLegalCopyrightStr();
char const* GetFileVersionStr();
char const* GetProductVersionStr();
char const* GetCompilerCFlags();
char const* GetCompilerCXXFlags();
}
#endif

View File

@@ -87,10 +87,10 @@ if( NOT WIN32 )
endif()
target_link_libraries(bnetserver
common
shared
database
ipc
shared
common
zmqpp
format
${MYSQL_LIBRARY}

View File

@@ -137,6 +137,26 @@ WrongPass.BanType = 0
WrongPass.Logging = 0
#
# SourceDirectory
# Description: The path to your TrinityCore source directory.
# If the path is left empty, the built-in CMAKE_SOURCE_DIR is used.
# Example: "../TrinityCore"
# Default: ""
SourceDirectory = ""
#
# MySQLExecutable
# Description: The path to your mysql cli binary.
# If the path is left empty, built-in path from cmake is used.
# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe"
# "mysql.exe"
# "/usr/bin/mysql"
# Default: ""
MySQLExecutable = ""
#
###################################################################################################
@@ -180,26 +200,6 @@ LoginDatabase.WorkerThreads = 1
Updates.EnableDatabases = 0
#
# Updates.SourcePath
# Description: The path to your TrinityCore source directory.
# If the path is left empty, built-in CMAKE_SOURCE_DIR is used.
# Example: "../TrinityCore"
# Default: ""
Updates.SourcePath = ""
#
# Updates.MySqlCLIPath
# Description: The path to your mysql cli binary.
# If the path is left empty, built-in path from cmake is used.
# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe"
# "mysql.exe"
# "/usr/bin/mysql"
# Default: ""
Updates.MySqlCLIPath = ""
#
# Updates.AutoSetup
# Description: Auto populate empty databases.

View File

@@ -21,6 +21,7 @@
#include "UpdateFetcher.h"
#include "DatabaseLoader.h"
#include "Config.h"
#include "BuiltInConfig.h"
#include <fstream>
#include <iostream>
@@ -35,23 +36,17 @@ using namespace boost::process;
using namespace boost::process::initializers;
using namespace boost::iostreams;
std::string DBUpdaterUtil::GetMySqlCli()
std::string DBUpdaterUtil::GetCorrectedMySQLExecutable()
{
if (!corrected_path().empty())
return corrected_path();
else
{
std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", "");
if (!entry.empty())
return entry;
else
return GitRevision::GetMySQLExecutable();
}
return BuiltInConfig::GetMySQLExecutable();
}
bool DBUpdaterUtil::CheckExecutable()
{
boost::filesystem::path exe(GetMySqlCli());
boost::filesystem::path exe(GetCorrectedMySQLExecutable());
if (!exists(exe))
{
exe.clear();
@@ -85,16 +80,6 @@ std::string& DBUpdaterUtil::corrected_path()
return path;
}
template<class T>
std::string DBUpdater<T>::GetSourceDirectory()
{
std::string const entry = sConfigMgr->GetStringDefault("Updates.SourcePath", "");
if (!entry.empty())
return entry;
else
return GitRevision::GetSourceDirectory();
}
// Auth Database
template<>
std::string DBUpdater<LoginDatabaseConnection>::GetConfigEntry()
@@ -111,7 +96,8 @@ std::string DBUpdater<LoginDatabaseConnection>::GetTableName()
template<>
std::string DBUpdater<LoginDatabaseConnection>::GetBaseFile()
{
return DBUpdater<LoginDatabaseConnection>::GetSourceDirectory() + "/sql/base/auth_database.sql";
return BuiltInConfig::GetSourceDirectory() +
"/sql/base/auth_database.sql";
}
template<>
@@ -169,7 +155,8 @@ std::string DBUpdater<CharacterDatabaseConnection>::GetTableName()
template<>
std::string DBUpdater<CharacterDatabaseConnection>::GetBaseFile()
{
return DBUpdater<CharacterDatabaseConnection>::GetSourceDirectory() + "/sql/base/characters_database.sql";
return BuiltInConfig::GetSourceDirectory() +
"/sql/base/characters_database.sql";
}
template<>
@@ -271,7 +258,7 @@ bool DBUpdater<T>::Update(DatabaseWorkerPool<T>& pool)
TC_LOG_INFO("sql.updates", "Updating %s database...", DBUpdater<T>::GetTableName().c_str());
Path const sourceDirectory(GetSourceDirectory());
Path const sourceDirectory(BuiltInConfig::GetSourceDirectory());
if (!is_directory(sourceDirectory))
{
@@ -442,7 +429,7 @@ void DBUpdater<T>::ApplyFile(DatabaseWorkerPool<T>& pool, std::string const& hos
boost::process::pipe errPipe = create_pipe();
child c = execute(run_exe(
boost::filesystem::absolute(DBUpdaterUtil::GetMySqlCli()).generic_string()),
boost::filesystem::absolute(DBUpdaterUtil::GetCorrectedMySQLExecutable()).generic_string()),
set_args(args), bind_stdin(source), throw_on_error(),
bind_stdout(file_descriptor_sink(outPipe.sink, close_handle)),
bind_stderr(file_descriptor_sink(errPipe.sink, close_handle)));

View File

@@ -57,7 +57,7 @@ struct UpdateResult
class DBUpdaterUtil
{
public:
static std::string GetMySqlCli();
static std::string GetCorrectedMySQLExecutable();
static bool CheckExecutable();
@@ -71,8 +71,6 @@ class DBUpdater
public:
using Path = boost::filesystem::path;
static std::string GetSourceDirectory();
static inline std::string GetConfigEntry();
static inline std::string GetTableName();

View File

@@ -140,11 +140,11 @@ set_target_properties(worldserver PROPERTIES LINK_FLAGS "${worldserver_LINK_FLAG
target_link_libraries(worldserver
game
common
scripts
shared
database
scripts
ipc
common
g3dlib
gsoap
Detour

View File

@@ -175,6 +175,45 @@ BindIP = "0.0.0.0"
ThreadPool = 2
#
# CMakeCommand
# Description: The path to your CMake binary.
# If the path is left empty, the built-in CMAKE_COMMAND is used.
# Example: "C:/Program Files (x86)/CMake/bin/cmake.exe"
# "/usr/bin/cmake"
# Default: ""
CMakeCommand = ""
#
# BuildDirectory
# Description: The path to your build directory.
# If the path is left empty, the built-in CMAKE_BINARY_DIR is used.
# Example: "../TrinityCore"
# Default: ""
BuildDirectory = ""
#
# SourceDirectory
# Description: The path to your TrinityCore source directory.
# If the path is left empty, the built-in CMAKE_SOURCE_DIR is used.
# Example: "../TrinityCore"
# Default: ""
SourceDirectory = ""
#
# MySQLExecutable
# Description: The path to your mysql cli binary.
# If the path is left empty, built-in path from cmake is used.
# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe"
# "mysql.exe"
# "/usr/bin/mysql"
# Default: ""
MySQLExecutable = ""
#
###################################################################################################
@@ -1148,26 +1187,6 @@ FeatureSystem.CharacterUndelete.Cooldown = 2592000
Updates.EnableDatabases = 15
#
# Updates.SourcePath
# Description: The path to your TrinityCore source directory.
# If the path is left empty, built-in CMAKE_SOURCE_DIR is used.
# Example: "../TrinityCore"
# Default: ""
Updates.SourcePath = ""
#
# Updates.MySqlCLIPath
# Description: The path to your mysql cli binary.
# If the path is left empty, built-in path from cmake is used.
# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe"
# "mysql.exe"
# "/usr/bin/mysql"
# Default: ""
Updates.MySqlCLIPath = ""
#
# Updates.AutoSetup
# Description: Auto populate empty databases.