diff --git a/Plugin/Makefile b/Plugin/Makefile index c6c6a64f55cd74b75a1a559ceff3ace5d3b4df13..2fcfa9b771547744f983388f2a9f60245897c097 100644 --- a/Plugin/Makefile +++ b/Plugin/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.2 2001-03-04 20:57:03 remacle Exp $ +# $Id: Makefile,v 1.3 2001-03-05 02:02:41 remacle Exp $ # # Makefile for "libAdapt.a" # @@ -18,7 +18,7 @@ OS_FLAGS = VERSION_FLAGS = RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) +CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) $(GUI_INCLUDE) SRC = Plugin.cpp diff --git a/Plugin/Plugin.cpp b/Plugin/Plugin.cpp index 1dc7774ebeaae3bc50af7bcbab0c30c3e7d8090c..c1f7a651a5fae0f17f878e626a644d96ccaa311d 100644 --- a/Plugin/Plugin.cpp +++ b/Plugin/Plugin.cpp @@ -3,6 +3,7 @@ #include <map> #include "Plugin.h" #include "Message.h" +#include <FL/filename.H> using namespace std; const char *GMSH_PluginEntry = "GMSH_RegisterPlugin"; @@ -57,13 +58,28 @@ GMSH_PluginManager* GMSH_PluginManager::Instance() void GMSH_PluginManager::RegisterDefaultPlugins() { - // For testing + struct dirent **list; + char ext[6]; - AddPlugin ("/cygdrive/c/develop/gmsh/Plugin/lib","libCutPlane"); - return; char *homeplugins = getenv ("GMSHPLUGINSHOME"); - if(!homeplugins)return; - + if(!homeplugins) + homeplugins = "./Plugin/lib"; + int nbFiles = filename_list(homeplugins,&list); + if(nbFiles <= 0) return; + for(int i=0;i<nbFiles;i++) + { + char *name = list[i]->d_name; + if(strlen(name) > 3) + { + strcpy(ext,name+(strlen(name)-3)); + if(!strcmp(ext,".so")) + { + AddPlugin(homeplugins,name); + } + } + } + for(int i=0;i<nbFiles;i++)free(list[i]); + free (list); } void GMSH_PluginManager::AddPlugin( char *dirName, char *pluginName) @@ -78,9 +94,9 @@ void GMSH_PluginManager::AddPlugin( char *dirName, char *pluginName) char plugin_copyright[256]; char plugin_help[256]; class GMSH_Plugin* (*RegisterPlugin)(void); - sprintf(dynamic_lib,"%s%s%s.so",dirName,SLASH,pluginName); + sprintf(dynamic_lib,"%s%s%s",dirName,SLASH,pluginName); Msg(INFO,"Opening Plugin %s",dynamic_lib); - void *hlib = dlopen (dynamic_lib,RTLD_LAZY); + void *hlib = dlopen (dynamic_lib,RTLD_NOW); char *err = dlerror(); if(hlib == NULL) { diff --git a/Plugin/Plugin.h b/Plugin/Plugin.h index 3b9225d019ca7290921495deb4efc76991d67b9c..fff007b00d38a3c3b7c75f429718b5f9cf22d109 100644 --- a/Plugin/Plugin.h +++ b/Plugin/Plugin.h @@ -51,7 +51,7 @@ public: class GMSH_PluginManager { GMSH_PluginManager(); - ~GMSH_PluginManager(); + virtual ~GMSH_PluginManager(); static GMSH_PluginManager *instance; PluginContainer* allPlugins; public :