diff --git a/src/CSparseSolvers/SparseCholeskySolver.cpp b/src/CSparseSolvers/SparseCholeskySolver.cpp index f0223d9db6..c9090484f9 100644 --- a/src/CSparseSolvers/SparseCholeskySolver.cpp +++ b/src/CSparseSolvers/SparseCholeskySolver.cpp @@ -31,14 +31,14 @@ using namespace sofa::linearalgebra; #ifdef SOFA_FLOAT SOFA_PRAGMA_WARNING("SparseCholeskySolver does not support float as scalar.") #else // SOFA_DOUBLE -int SparseCholeskySolverClass = - sofa::core::RegisterObject( - "Direct linear solver based on Sparse Cholesky factorization, implemented with the " - "CSPARSE library") - .add, FullVector > >(); -template class SOFA_CSPARSESOLVERS_API - SparseCholeskySolver, FullVector >; +void registerSparseCholeskySolver(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects(sofa::core::ObjectRegistrationData("Direct linear solver based on Sparse Cholesky factorization, implemented with the CSPARSE library") + .add, FullVector > >()); +} + +template class SOFA_CSPARSESOLVERS_API SparseCholeskySolver, FullVector >; #endif // SOFA_FLOAT } // namespace sofa::component::linearsolver::direct diff --git a/src/CSparseSolvers/SparseLUSolver.cpp b/src/CSparseSolvers/SparseLUSolver.cpp index e2e7b4214c..fcc096ae0b 100644 --- a/src/CSparseSolvers/SparseLUSolver.cpp +++ b/src/CSparseSolvers/SparseLUSolver.cpp @@ -33,10 +33,13 @@ using namespace sofa::linearalgebra; #ifdef SOFA_FLOAT SOFA_PRAGMA_WARNING("SparseLUSolver does not support float as scalar.") #else // SOFA_DOUBLE -int SparseLUSolverClass = sofa::core::RegisterObject("Direct linear solver based on Sparse LU factorization, implemented with the CSPARSE library") - .add< SparseLUSolver< CompressedRowSparseMatrix, FullVector > >() - .add< SparseLUSolver< CompressedRowSparseMatrix >,FullVector > >() - ; + +void registerSparseLUSolver(sofa::core::ObjectFactory* factory) +{ + factory->registerObjects(sofa::core::ObjectRegistrationData("Direct linear solver based on Sparse LU factorization, implemented with the CSPARSE library") + .add< SparseLUSolver< CompressedRowSparseMatrix, FullVector > >() + .add< SparseLUSolver< CompressedRowSparseMatrix >,FullVector > >()); +} template class SOFA_CSPARSESOLVERS_API SparseLUSolver< CompressedRowSparseMatrix, FullVector >; template class SOFA_CSPARSESOLVERS_API SparseLUSolver< CompressedRowSparseMatrix >, FullVector >; diff --git a/src/CSparseSolvers/config.h.in b/src/CSparseSolvers/config.h.in index e4855effe5..8c2ba96b1a 100644 --- a/src/CSparseSolvers/config.h.in +++ b/src/CSparseSolvers/config.h.in @@ -10,3 +10,9 @@ #else # define SOFA_CSPARSESOLVERS_API SOFA_IMPORT_DYNAMIC_LIBRARY #endif + +namespace csparsesolvers +{ + constexpr const char* MODULE_NAME = "@PROJECT_NAME@"; + constexpr const char* MODULE_VERSION = "@PROJECT_VERSION@"; +} // namespace csparsesolvers \ No newline at end of file diff --git a/src/CSparseSolvers/init.cpp b/src/CSparseSolvers/init.cpp index 767f9f6ebc..1f442d274a 100644 --- a/src/CSparseSolvers/init.cpp +++ b/src/CSparseSolvers/init.cpp @@ -2,6 +2,13 @@ #include using sofa::core::ObjectFactory; +#include + +namespace csparsesolvers +{ + extern void registerSparseLUSolver(sofa::core::ObjectFactory* factory); + extern void registerSparseCholeskySolver(sofa::core::ObjectFactory* factory); +} extern "C" { SOFA_CSPARSESOLVERS_API void initExternalModule(); @@ -9,7 +16,7 @@ extern "C" { SOFA_CSPARSESOLVERS_API const char* getModuleVersion(); SOFA_CSPARSESOLVERS_API const char* getModuleLicense(); SOFA_CSPARSESOLVERS_API const char* getModuleDescription(); - SOFA_CSPARSESOLVERS_API const char* getModuleComponentList(); + SOFA_CSPARSESOLVERS_API void registerObjects(sofa::core::ObjectFactory* factory); } void initExternalModule() @@ -17,18 +24,21 @@ void initExternalModule() static bool first = true; if (first) { + // make sure that this plugin is registered into the PluginManager + sofa::helper::system::PluginManager::getInstance().registerPlugin(csparsesolvers::MODULE_NAME); + first = false; } } const char* getModuleName() { - return sofa_tostring(SOFA_TARGET); + return csparsesolvers::MODULE_NAME; } const char* getModuleVersion() { - return sofa_tostring(CSPARSESOLVERS_VERSION); + return csparsesolvers::MODULE_VERSION; } const char* getModuleLicense() @@ -41,9 +51,8 @@ const char* getModuleDescription() return "A set of linear solvers based on the library CSparse"; } -const char* getModuleComponentList() +void registerObjects(sofa::core::ObjectFactory* factory) { - /// string containing the names of the classes provided by the plugin - static std::string classes = ObjectFactory::getInstance()->listClassesFromTarget(sofa_tostring(SOFA_TARGET)); - return classes.c_str(); + csparsesolvers::registerSparseLUSolver(factory); + csparsesolvers::registerSparseCholeskySolver(factory); }