Load openssl libs from working directory / fix log

- OpenSSL is being copied to the exe directory on build but nothing was loading the local dlls
- Add OpenSSL path loading from the working directory
- Add step to copy legacy.dll for openssl since it is a runtime dll
- This removes the requirement to install OpenSSL on the system
- The working directory can be separate from the exe directory if the user still requires this functionality
- Change logging to always be active when the system starts
This commit is contained in:
Knightly 2026-05-05 13:18:49 +12:00
parent 85c3255568
commit e5df0172d0
3 changed files with 18 additions and 6 deletions

View File

@ -37,3 +37,13 @@ target_include_directories(loginserver PRIVATE ..)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set_property(TARGET loginserver PROPERTY FOLDER executables/servers)
# vcpkg doesn't copy legacy.dll automatically because it is loaded at runtime, not via the import table.
if(WIN32 AND DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_TARGET_TRIPLET)
add_custom_command(TARGET loginserver POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<IF:$<CONFIG:Debug>,${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin/legacy.dll,${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/legacy.dll>"
"$<TARGET_FILE_DIR:loginserver>/legacy.dll"
VERBATIM
)
endif()

View File

@ -31,6 +31,7 @@
#endif
#include <cstring>
#include <filesystem>
#include <string>
#include <memory>
@ -182,6 +183,12 @@ static OSSL_PROVIDER *s_default_provider = nullptr;
bool eqcrypt_init()
{
#ifdef EQEMU_USE_OPENSSL
#ifdef _WIN32
// Set OpenSSL default provider search path to the working directory. Okay to throw.
std::string search_path = std::filesystem::current_path().string();
OSSL_PROVIDER_set_default_search_path(nullptr, search_path.c_str());
#endif
if (!s_default_provider) {
s_default_provider = OSSL_PROVIDER_load(nullptr, "default");
}

View File

@ -159,6 +159,7 @@ void start_web_server()
int main(int argc, char **argv)
{
RegisterExecutablePlatform(ExePlatformLogin);
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
set_exception_handler();
if (!eqcrypt_init()) {
@ -166,12 +167,6 @@ int main(int argc, char **argv)
return 1;
}
LogInfo("Logging System Init");
if (argc == 1) {
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
}
PathManager::Instance()->Init();
// command handler