File layout best practices for extensions

R

Robert Au

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

Trans

Robert said:
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.rubyforge.org/).

t.
 
E

Eric Hodel

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top