diff --git a/Sofa/Component/ODESolver/Backward/compat/sofa/component/odesolver/backward/init.cpp b/Sofa/Component/ODESolver/Backward/compat/sofa/component/odesolver/backward/init.cpp index dca9ae052e2..262bb763764 100644 --- a/Sofa/Component/ODESolver/Backward/compat/sofa/component/odesolver/backward/init.cpp +++ b/Sofa/Component/ODESolver/Backward/compat/sofa/component/odesolver/backward/init.cpp @@ -27,7 +27,7 @@ namespace sofa::component::odesolver::backward { - + extern "C" { SOFA_EXPORT_DYNAMIC_LIBRARY void initExternalModule(); SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleName(); @@ -52,13 +52,27 @@ const char* getModuleVersion() void registerObjects(sofa::core::ObjectFactory* factory) { + const auto isLoaded = sofa::helper::system::PluginManager::getInstance().isPluginLoaded(Sofa.Component.IntegrationScheme.Backward); + bool objLoaded = false; + + if (isLoaded.second) + { + objLoaded = factory->registerObjectsFromPlugin(Sofa.Component.IntegrationScheme.Backward); + if (!objLoaded) + msg_error_once("Sofa.Component.ODESolver.Backward")<<"Registering objects from Sofa.Component.IntegrationScheme.Backward failed."; + } } void init() { msg_deprecated_once(MODULE_NAME)<<"This plugin is empty since v26.12 and will be removed in v27.12, load Sofa.Component.IntegrationScheme.Backward instead."; + auto status = sofa::helper::system::PluginManager::getInstance().loadPluginByName(Sofa.Component.IntegrationScheme.Backward) ; + if (status <= sofa::helper::system::PluginManager::PluginLoadStatus::ALREADY_LOADED) + msg_info_once("Sofa.Component.ODESolver.Backward")<<"Sofa.Component.IntegrationScheme.Backward has been loaded automatically."; + else + msg_error_once("Sofa.Component.ODESolver.Backward")<<"Tried to load Sofa.Component.IntegrationScheme.Backward automatically but failed."; } } // namespace sofa::component::odesolver::backward diff --git a/Sofa/Component/ODESolver/CMakeLists.txt b/Sofa/Component/ODESolver/CMakeLists.txt index 05314933754..5940ba021af 100644 --- a/Sofa/Component/ODESolver/CMakeLists.txt +++ b/Sofa/Component/ODESolver/CMakeLists.txt @@ -16,8 +16,10 @@ set(SOURCE_FILES ${SOFACOMPONENTODESOLVER_SOURCE_DIR}/init.cpp ) +sofa_find_package(Sofa.Component.IntegrationScheme REQUIRED) + add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES}) -target_link_libraries(${PROJECT_NAME} PUBLIC ${SOFACOMPONENTODESOLVER_TARGETS}) +target_link_libraries(${PROJECT_NAME} PUBLIC ${SOFACOMPONENTODESOLVER_TARGETS} Sofa.Component.IntegrationScheme) sofa_create_package_with_targets( PACKAGE_NAME ${PROJECT_NAME} diff --git a/Sofa/Component/ODESolver/Forward/compat/sofa/component/odesolver/forward/init.cpp b/Sofa/Component/ODESolver/Forward/compat/sofa/component/odesolver/forward/init.cpp index a4d3751f83e..7af9521bbdb 100644 --- a/Sofa/Component/ODESolver/Forward/compat/sofa/component/odesolver/forward/init.cpp +++ b/Sofa/Component/ODESolver/Forward/compat/sofa/component/odesolver/forward/init.cpp @@ -19,15 +19,15 @@ * * * Contact information: contact@sofa-framework.org * ******************************************************************************/ -#include +#include +#include #include #include -#include namespace sofa::component::odesolver::forward { - + extern "C" { SOFA_EXPORT_DYNAMIC_LIBRARY void initExternalModule(); SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleName(); @@ -52,12 +52,27 @@ const char* getModuleVersion() void registerObjects(sofa::core::ObjectFactory* factory) { + const auto isLoaded = sofa::helper::system::PluginManager::getInstance().isPluginLoaded(Sofa.Component.IntegrationScheme.Forward); + bool objLoaded = false; + + if (isLoaded.second) + { + objLoaded = factory->registerObjectsFromPlugin(Sofa.Component.IntegrationScheme.Forward); + if (!objLoaded) + msg_error_once("Sofa.Component.ODESolver.Forward")<<"Registering objects from Sofa.Component.IntegrationScheme.Forward failed."; + } } void init() { msg_deprecated_once(MODULE_NAME)<<"This plugin is empty since v26.12 and will be removed in v27.12, load Sofa.Component.IntegrationScheme.Forward instead."; + auto status = sofa::helper::system::PluginManager::getInstance().loadPluginByName(Sofa.Component.IntegrationScheme.Forward) ; + + if (status <= sofa::helper::system::PluginManager::PluginLoadStatus::ALREADY_LOADED) + msg_info_once("Sofa.Component.ODESolver.Forward")<<"Sofa.Component.IntegrationScheme.Forward has been loaded automatically."; + else + msg_error_once("Sofa.Component.ODESolver.Forward")<<"Tried to load Sofa.Component.IntegrationScheme.Forward automatically but failed."; } } // namespace sofa::component::odesolver::forward diff --git a/Sofa/Component/ODESolver/Sofa.Component.ODESolverConfig.cmake.in b/Sofa/Component/ODESolver/Sofa.Component.ODESolverConfig.cmake.in index fd6e05d58cd..19a9d63728c 100644 --- a/Sofa/Component/ODESolver/Sofa.Component.ODESolverConfig.cmake.in +++ b/Sofa/Component/ODESolver/Sofa.Component.ODESolverConfig.cmake.in @@ -21,6 +21,7 @@ foreach(target ${SOFACOMPONENTODESOLVER_SOURCE_DIR}) endforeach() sofa_find_package(Sofa.Simulation.Core QUIET REQUIRED) +sofa_find_package(Sofa.Component.IntegrationScheme QUIET REQUIRED) if(NOT TARGET @PROJECT_NAME@) include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") diff --git a/Sofa/Component/ODESolver/compat/sofa/component/odesolver/init.cpp b/Sofa/Component/ODESolver/compat/sofa/component/odesolver/init.cpp index f93c3510f03..820c55d3075 100644 --- a/Sofa/Component/ODESolver/compat/sofa/component/odesolver/init.cpp +++ b/Sofa/Component/ODESolver/compat/sofa/component/odesolver/init.cpp @@ -27,7 +27,7 @@ namespace sofa::component::odesolver { - + extern "C" { SOFA_EXPORT_DYNAMIC_LIBRARY void initExternalModule(); SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleName(); @@ -52,12 +52,29 @@ const char* getModuleVersion() void registerObjects(sofa::core::ObjectFactory* factory) { + const auto isLoaded = sofa::helper::system::PluginManager::getInstance().isPluginLoaded(Sofa.Component.IntegrationScheme); + bool objLoaded = true; + + if (isLoaded.second) + { + objLoaded &= factory->registerObjectsFromPlugin(Sofa.Component.IntegrationScheme.Backward); + objLoaded &= factory->registerObjectsFromPlugin(Sofa.Component.IntegrationScheme.Forward); + + if (!objLoaded) + msg_error_once("Sofa.Component.ODESolver")<<"Registering objects from Sofa.Component.IntegrationScheme failed."; + } } void init() { - msg_deprecated_once(MODULE_NAME)<<"This plugin and its sub-plugins are empty since v26.12 and will be removed in v27.12, load Sofa.Component.IntegrationScheme instead."; + msg_deprecated_once(MODULE_NAME)<<"This plugin is empty since v26.12 and will be removed in v27.12, load Sofa.Component.IntegrationScheme instead."; + auto status = sofa::helper::system::PluginManager::getInstance().loadPluginByName(Sofa.Component.IntegrationScheme) ; + + if (status <= sofa::helper::system::PluginManager::PluginLoadStatus::ALREADY_LOADED) + msg_info_once("Sofa.Component.ODESolver")<<"Sofa.Component.IntegrationScheme has been loaded automatically."; + else + msg_error_once("Sofa.Component.ODESolver")<<"Tried to load Sofa.Component.IntegrationScheme automatically but failed."; } } // namespace sofa::component::integrationscheme