[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

File layout best practices for extensions

Robert Au

12/19/2006 7:00:00 PM

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, 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? 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?)

--
Robert Au myshkin+ruby@durak.net
2 Answers

Trans

12/20/2006 2:25:00 AM

0


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, 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? 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?)

trying to think of a project or tow you might have al ook at for an
example -- maybe ruby-libxml (http://libxml.ruby...).

t.


Eric Hodel

12/20/2006 9:53:00 AM

0

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.se...

I LIT YOUR GEM ON FIRE!