diff --git a/src/chainloader/utils.cpp b/src/chainloader/utils.cpp index 4e36bdd6..ccd65d33 100644 --- a/src/chainloader/utils.cpp +++ b/src/chainloader/utils.cpp @@ -104,3 +104,23 @@ void* find_plugin_library(const std::string& name) { return handle; } + +void log_failing_dlsym(const std::string& library_name, + const char* function_name) { + const fs::path this_plugin_path = get_this_file_location(); + + Logger logger = Logger::create_exception_logger(); + + logger.log(""); + logger.log("Could not find '" + std::string(function_name) + "' in '" + + library_name + "'"); + logger.log(""); + logger.log("Try rerunning 'yabridgectl sync'."); + logger.log(""); + logger.log("Source: '" + this_plugin_path.string() + "'"); + logger.log(""); + + send_notification("Could not find '" + std::string(function_name) + + "' in '" + library_name + "'", + "Try rerunning 'yabridgectl sync'.", this_plugin_path); +} diff --git a/src/chainloader/utils.h b/src/chainloader/utils.h index 0bd2c769..b572eb3d 100644 --- a/src/chainloader/utils.h +++ b/src/chainloader/utils.h @@ -37,3 +37,10 @@ * directories in case `ldconfig` was not set up correctly. */ void* find_plugin_library(const std::string& name); + +/** + * Log a message when a `dlsym()` call fails and show a corresponding desktop + * notification. Used as part of the `LOAD_FUNCTION` macros. + */ +void log_failing_dlsym(const std::string& library_name, + const char* function_name); diff --git a/src/chainloader/vst2-chainloader.cpp b/src/chainloader/vst2-chainloader.cpp index 030bebaf..2078fde5 100644 --- a/src/chainloader/vst2-chainloader.cpp +++ b/src/chainloader/vst2-chainloader.cpp @@ -76,7 +76,10 @@ bool initialize_library() { do { \ (name) = \ reinterpret_cast(dlsym(library_handle, #name)); \ - assert(name); \ + if (!(name)) { \ + log_failing_dlsym(yabridge_vst2_plugin_name, #name); \ + return false; \ + } \ } while (false) LOAD_FUNCTION(yabridge_plugin_init); diff --git a/src/chainloader/vst3-chainloader.cpp b/src/chainloader/vst3-chainloader.cpp index 3ce91113..103084c5 100644 --- a/src/chainloader/vst3-chainloader.cpp +++ b/src/chainloader/vst3-chainloader.cpp @@ -94,7 +94,10 @@ bool initialize_library() { do { \ (name) = \ reinterpret_cast(dlsym(library_handle, #name)); \ - assert(name); \ + if (!(name)) { \ + log_failing_dlsym(yabridge_vst3_plugin_name, #name); \ + return false; \ + } \ } while (false) LOAD_FUNCTION(yabridge_module_init);