From f79d3d2b38511e9730b8503c0994b132486d9df2 Mon Sep 17 00:00:00 2001 From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be> Date: Mon, 5 Mar 2001 02:02:41 +0000 Subject: [PATCH] Added automatic scan dir --- Plugin/Makefile | 4 ++-- Plugin/Plugin.cpp | 30 +++++++++++++++++++++++------- Plugin/Plugin.h | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Plugin/Makefile b/Plugin/Makefile index c6c6a64f55..2fcfa9b771 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 1dc7774ebe..c1f7a651a5 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 3b9225d019..fff007b00d 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 : -- GitLab