On Dec 19, 2006, at 11:05, Robert Au wrote:

> I'm implementing a module Foo, with classes Foo::W, Foo::X, Foo::Y,  
> and
> Foo::Z. For various reasons, it is easier to code key parts of  
> Foo::W and
> Foo::X in C, but the remainder of the code is easier to write in
> Ruby. Most applications that use this module will need all four
> classes. What's the best way to lay out the code for use? I assume  
> that
> there should be a top-level Foo.rb that users can require and that
> requires the appropriate .so and .rb files,

If you have a top-level file to require that correctly handles the  
details then it doesn't matter to me what your internals look like.

> but is it worth having
>
>   require "Foo/W.so"
>   require "Foo/X.so"
>   require "Foo/W.rb"
>   require "Foo/X.rb"
>   require "Foo/Y.rb"
>   require "Foo/Z.rb"
>
> in Foo.rb?

That is a question only you can answer.  You're going to be  
maintaining it.

> If so, how does one write an extconf.rb to build W.so and X.so
> in the same directory? (Or am I forced to keep the sources for  
> those two
> in separate directories, or hand-edit the Makefile?)

I'm not expert, but it seems that mkmf.rb only allows one target per  
create_makefile.  If this is true you'll need N make files in N  
directories.  Don't hand-edit the Makefile generated by extconf.rb.   
You will only screw it up for platforms that are not your own.

-- 
Eric Hodel - drbrain / segment7.net - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!