Re: Guile support in GNU make

Paul Smith <[email protected]>
Newsgroups gmane.comp.gnu.make.devel
Organization GNU's Not UNIX!
Message-ID <1316715765.3129.39.camel@psmith-ubeta>
On Wed, 2011-09-21 at 21:04 +0200, Boris Kolpackov wrote:
> This made me think that perhaps we could do something similar for GNU 
> make. That is provide a way for a makefile to request the loading of a
> plugin module. If the module does not exist, make can try to build it
> and re-exec in exactly the same way included makefiles are handles right
> now (this will allow the second category of users mentioned about to
> distribute source code for their GNU make plugins together with their
> software). 
> 
> Once loaded, a plugin is given a chance to register additional functions.
> Maybe we can also define some additional hooks, like when up-to-dateness
> of a file is determined, or before a command is executed. But I think just
> extra functions will be a good first step.
> 
> The nice thing about the GCC plugin architecture is that the plugin
> is loaded into the GCC address space. This means that it can access
> all the functions, data structures, etc., that built-in GCC code can
> access. I think the same approach will work fairly well for GNU make
> as well.

This is actually the part that worries me the most about this idea.  As
you're aware the internals of GNU make are in no way clean and
protected: global variables abound and there are few APIs internally
that allow for ease-of-use.  I would be very nervous about exposing that
to user-written code, without any control.  I guess if it breaks they
get to keep both pieces, but still.

Second, I wonder how portable this capability really is.  It works well
on Linux but how easy is it to get similar behaviors on the other
POSIX-based systems, much less Windows etc.?

Still it's a cool idea that make would build its own loadable module and
then load it :-).  Making this easy might be complex though: ideally
you'd like to add some more builtin variables that provide the rules for
building a loadable object on the local system, based (I guess) on
configure-discovered commands.  Would this require libtool, which I
really hate?  Or could it be done more simply?  I don't know.  Some
systems (I'm looking at you, AIX) seem to go out of their way (IIRC,
it's been a while) to make building a dynamic object tricky.

> And if we have something like this, it will be fairly straightforward
> to add Guile support as just another plugin.

Actually from what I've seen I think it will be difficult to add Guile
support in this way: because Guile is garbage-collected you have to play
some tricks with your program's main() so that Guile can understand how
the stack is used/ordered.  I'm not sure how possible it is to bolt on
Guile support solely through a dlopen()'d shared object.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.