Skip to content

Commit

Permalink
Core/Common: Add a generic config helper to access built-in overwrite…
Browse files Browse the repository at this point in the history
…able 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

(cherry picked from commit 719159e)
  • Loading branch information
Naios committed Feb 22, 2016
1 parent f2233f5 commit b5369b7
Show file tree
Hide file tree
Showing 13 changed files with 190 additions and 92 deletions.
4 changes: 2 additions & 2 deletions revision_data.h.in.cmake
Expand Up @@ -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_335.60_2015_11_07.sql"
#define VER_COMPANYNAME_STR "TrinityCore Developers"
Expand All @@ -12,6 +14,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__
52 changes: 52 additions & 0 deletions src/common/Configuration/BuiltInConfig.cpp
@@ -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);
}
42 changes: 42 additions & 0 deletions src/common/Configuration/BuiltInConfig.h
@@ -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
8 changes: 4 additions & 4 deletions src/common/Configuration/Config.cpp
Expand Up @@ -61,7 +61,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);

Expand All @@ -70,7 +70,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
{
Expand All @@ -84,12 +84,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);
}
Expand Down
8 changes: 4 additions & 4 deletions src/common/Configuration/Config.h
Expand Up @@ -41,10 +41,10 @@ class ConfigMgr

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);
Expand Down
20 changes: 10 additions & 10 deletions src/common/GitRevision.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -66,13 +76,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;
}
4 changes: 2 additions & 2 deletions src/common/GitRevision.h
Expand Up @@ -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();
Expand All @@ -33,8 +35,6 @@ namespace GitRevision
char const* GetLegalCopyrightStr();
char const* GetFileVersionStr();
char const* GetProductVersionStr();
char const* GetCompilerCFlags();
char const* GetCompilerCXXFlags();
}

#endif
4 changes: 2 additions & 2 deletions src/server/authserver/CMakeLists.txt
Expand Up @@ -79,10 +79,10 @@ if( NOT WIN32 )
endif()

target_link_libraries(authserver
common
shared
format
database
common
format
${MYSQL_LIBRARY}
${OPENSSL_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
Expand Down
40 changes: 20 additions & 20 deletions src/server/authserver/authserver.conf.dist
Expand Up @@ -137,6 +137,26 @@ WrongPass.Logging = 0

BanExpiryCheckInterval = 60

#
# 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 = ""

#
###################################################################################################

Expand Down Expand Up @@ -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.
Expand Down
33 changes: 10 additions & 23 deletions src/server/database/Updater/DBUpdater.cpp
Expand Up @@ -21,6 +21,7 @@
#include "UpdateFetcher.h"
#include "DatabaseLoader.h"
#include "Config.h"
#include "BuiltInConfig.h"

#include <fstream>
#include <iostream>
Expand All @@ -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();
Expand Down Expand Up @@ -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()
Expand All @@ -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<>
Expand Down Expand Up @@ -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<>
Expand Down Expand Up @@ -239,7 +226,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))
{
Expand Down Expand Up @@ -410,7 +397,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)));
Expand Down
4 changes: 1 addition & 3 deletions src/server/database/Updater/DBUpdater.h
Expand Up @@ -57,7 +57,7 @@ struct UpdateResult
class DBUpdaterUtil
{
public:
static std::string GetMySqlCli();
static std::string GetCorrectedMySQLExecutable();

static bool CheckExecutable();

Expand All @@ -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();
Expand Down
4 changes: 2 additions & 2 deletions src/server/worldserver/CMakeLists.txt
Expand Up @@ -131,10 +131,10 @@ set_target_properties(worldserver PROPERTIES LINK_FLAGS "${worldserver_LINK_FLAG

target_link_libraries(worldserver
game
common
scripts
shared
database
scripts
common
g3dlib
gsoap
Detour
Expand Down

0 comments on commit b5369b7

Please sign in to comment.