Hi, all--
I am developing a project which I expect will involve a number of extension libraries, or plugins (a large number, many of them provided by third parties, if my project ever becomes popular). For several reasons (which I will explain on request if anyone is curious), I feel it is best *not* to implement these libraries as eggs. So I am trying to work out a reasonable method for deploying the libraries and loading them at runtime.
Required features:
* users (who might not have admin privileges) can determine
where the libraries are installed
* users can select which libraries to use in an application (and this
potentially entails selecting alternate implementations of the
same functionality)
* the main application can find the required libraries at runtime
Desirable features:
* a user should be able to just install the software and start to
use it without doing any configuration
* all library code is in modules
I've spent a good deal of time browsing the documentation and experimenting, and I can see how to achieve the required features but not the desirable ones. But before I start making compromises, I thought I'd check with the list to see if my understandings are correct. So here are my questions ... as implied above, I think the answers are not the ones I want, but I'm hoping I've overlooked something ;-) :
1) Is there a way to set an arbitrary search path, such that REQUIRE (or LOAD, or some such thing) will work when the library is in a non-standard location?
2) Is it possible to load a library selected at runtime (via an environment variable, config file, command-line argument ... the exact method isn't that important) AND have the symbols defined in that library included in a module?
3) Is there a way for a Chicken executable or library to determine its own location in the filesystem?
4) Is LOAD-RELATIVE broken? I wrote some test code to try to use that procedure, but as far as I can tell it behaves just like LOAD, i.e. any relative path I give it is determined relative to the current directory from which the program is invoked. Though I would note that the documentation isn't entirely clear to me: "loads FILE relative to the path of the currently loaded file." ...? What does "the currently loaded file" mean? I will be happy to post my code if this is not a known issue.
Thanks for any & all info!
--
Matt Gushee