[Vm-dev] plugin location
John M McIntosh
johnmci at smalltalkconsulting.com
Thu Aug 27 03:25:58 UTC 2009
I've a flag in the mac carbon vm that turns off oh 90% of the
searching, that is ON by default,
people haven't complained. Your milage might be different for Linux
users.
SqueakPluginsBuiltInOrLocalOnly
when set to true makes the lookup logic only consider unix libraries
or os-x bundles in
the ./Plugins folder in the same directory as the app, or the
application Resources folder,
or as a foo.framework in the /System/Library/Frameworks/.
To turn this feature off and then consider the other 80+ choices of
library locations and
library names set SqueakPluginsBuiltInOrLocalOnly to false.Turning the
feature on
avoids a couple of hundred stat calls at startup time as the VM hunts
for external versions
of internal plugins. It was added to reduce overhead and help the
macIntel migration were
we provided new universal binaries that live in the application
Resources folder since we cann't
load powerpc plugins on macintel machines if we found them first in
the ./Pugins folder
We skip looking for
static char *prefixes[]= { "", "lib", 0 };
static char *suffixes[]= { "", ".so", ".dylib",0 };
and for local or built in does the vm directory path (which is the os-
x bundle resource folder), then ./Plugins
if ( (handle= tryLoading( vmDirPath, pluginName))
|| (handle= tryLoading( pluginDirPath, pluginName))
and skips
|| (handle= tryLoading( "./", pluginName))
|| (handle= tryLoadingPath("SQUEAK_PLUGIN_PATH", pluginName))
|| (handle= tryLoading( VM_LIBDIR"/", pluginName))
|| (handle= tryLoadingPath("LD_LIBRARY_PATH",
pluginName))
|| (handle= tryLoading( "", pluginName))
# if defined(VM_X11DIR)
|| (handle= tryLoading(VM_X11DIR"/", pluginName))
# endif
)
A special case to this is a bit more hunting if the plugin is
*.framework since we then consider the vmDir, the puginDirpath, and
the systemFolder
Otherwise it would also hunt in
"/CoreServices.framework/Frameworks",
"/ApplicationServices.framework/Frameworks",
"/Carbon.framework/Frameworks",
On 26-Aug-09, at 7:16 PM, Ian Piumarta wrote:
> Does anyone use the plugin mechanism to load libraries that are not
> plugins on Unix? Or to override just one or two of the installed
> ones from a user directory?
>
> I'm thinking of simplifying the search strategy (which is indeed
> broken w.r.t. overriding installed plugins as Subbu points out)
> along with all the junk related to probing for a zillion prefixes
> and suffixes. Unlike libtool, CMake manages to build loadable
> modules with predictable 'lib*.so' names regardless of the
> platform. That, combined with a launch script that can add a -
> plugins option to the VM args, suggests it ought to be possible to
> find the plugin precisely on the first attempt, without having to
> search at all.
>
> The advantage is vastly simpler logic that is completely predictable.
>
> The disadvantage is that it will not be possible to subvert the
> plugin mechanism to load system libraries, and it will not be
> possible to override the installed plugins with a single plugin
> built in a different directory. Would either of these be a
> noticeable loss?
>
> Cheers,
> Ian
>
--
=
=
=
========================================================================
John M. McIntosh <johnmci at smalltalkconsulting.com> Twitter:
squeaker68882
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
=
=
=
========================================================================
More information about the Vm-dev
mailing list