X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fmodule.cpp;h=5d6400399013eb9a425524b73d508e540804fcfe;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=2bef9aa0dddbf4951995069b382b547143f509aa;hpb=28f28705612902c15cd0702cc891fba35bf2d2df;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/module.cpp b/synfig-core/trunk/src/synfig/module.cpp index 2bef9aa..5d64003 100644 --- a/synfig-core/trunk/src/synfig/module.cpp +++ b/synfig-core/trunk/src/synfig/module.cpp @@ -1,20 +1,21 @@ /* === S Y N F I G ========================================================= */ -/*! \file module.cpp +/*! \file synfig/module.cpp ** \brief writeme ** -** $Id: module.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -32,8 +33,12 @@ #include "module.h" #include "general.h" -#include #include + +#ifndef USE_CF_BUNDLES +#include +#endif + #endif /* === M A C R O S ========================================================= */ @@ -51,10 +56,11 @@ Module::Book *synfig::Module::book_; bool Module::subsys_init(const String &prefix) { +#ifndef USE_CF_BUNDLES #ifndef SYNFIG_LTDL_NO_STATIC //LTDL_SET_PRELOADED_SYMBOLS(); #endif - + if(lt_dlinit()) { error(_("Errors on lt_dlinit()")); @@ -63,7 +69,8 @@ Module::subsys_init(const String &prefix) } lt_dladdsearchdir("."); - lt_dladdsearchdir("~/.synfig/modules"); + if(getenv("HOME")) + lt_dladdsearchdir(strprintf("%s/.synfig/modules", getenv("HOME")).c_str()); lt_dladdsearchdir((prefix+"/lib/synfig/modules").c_str()); #ifdef LIBDIR lt_dladdsearchdir(LIBDIR"/synfig/modules"); @@ -73,7 +80,7 @@ Module::subsys_init(const String &prefix) #endif lt_dladdsearchdir("/usr/local/lib/synfig/modules"); lt_dladdsearchdir("."); - +#endif book_=new Book; return true; } @@ -82,15 +89,22 @@ bool Module::subsys_stop() { delete book_; - + +#ifndef USE_CF_BUNDLES lt_dlexit(); +#endif return true; } -bool -register_default_modules() +void +Module::register_default_modules(ProgressCallback *callback) { - return true; + #define REGISTER_MODULE(module) if (!Register(module, callback)) \ + throw std::runtime_error(strprintf(_("Unable to load module '%s'"), module)) + REGISTER_MODULE("lyr_freetype"); + REGISTER_MODULE("mod_geometry"); + REGISTER_MODULE("mod_gradient"); + REGISTER_MODULE("mod_particle"); } Module::Book& @@ -108,21 +122,22 @@ synfig::Module::Register(Module::Handle mod) bool synfig::Module::Register(const String &module_name, ProgressCallback *callback) { +#ifndef USE_CF_BUNDLES lt_dlhandle module; if(callback)callback->task(strprintf(_("Attempting to register \"%s\""),module_name.c_str())); module=lt_dlopenext((string("lib")+module_name).c_str()); if(!module)module=lt_dlopenext(module_name.c_str()); - + if(!module) { - if(callback)callback->error(strprintf(_("Unable to find module \"%s\" (%s)"),module_name.c_str(),lt_dlerror())); + if(callback)callback->warning(strprintf(_("Unable to find module \"%s\" (%s)"),module_name.c_str(),lt_dlerror())); return false; } if(callback)callback->task(strprintf(_("Found module \"%s\""),module_name.c_str())); - + Module::constructor_type constructor=NULL; Handle mod; @@ -147,7 +162,7 @@ synfig::Module::Register(const String &module_name, ProgressCallback *callback) // if(callback)callback->task(string("looking for -> lib")+module_name+"_LTX_new_instance()"); constructor=(Module::constructor_type )lt_dlsym(module,(string("_")+module_name+"_LTX_new_instance").c_str()); } - + if(constructor) { // if(callback)callback->task(strprintf("Executing callback for \"%s\"",module_name.c_str())); @@ -173,6 +188,7 @@ synfig::Module::Register(const String &module_name, ProgressCallback *callback) } if(callback)callback->task(strprintf(_("Success for \"%s\""),module_name.c_str())); - - return false; + +#endif + return true; }