.rb file includes c-extension of same name?

Hi,

I have foo.rb and foo.so, the C-extension part of the module.

Inside foo.rb, I can put, require 'foo.so', and it works fine,
allowing other modules to say require 'foo', and have the .rb
be loaded, which in turn loads the C-extension.

I'm wondering if there's a recommended platform-independent
way to do this? For instance, on OS X, C-extensions end in
".bundle" not ".so".

I wouldn't mind even saying require "foo.#{DLEXT}", if there
were such a thing available from ruby.

Is there a recommended way to have a .rb file require a C-extension file of the same name in a platform-independent
way? Or is the preferred solution to alter the name of one
of the two files?

Thanks,

Bill

harp:~ > ruby -r yaml -r rbconfig -e' y Config::CONFIG '|egrep DLEXT
DLEXT2: ""
DLEXT: so

-a

···

On Mon, 20 Mar 2006, Bill Kelly wrote:

Hi,

I have foo.rb and foo.so, the C-extension part of the module.

Inside foo.rb, I can put, require 'foo.so', and it works fine,
allowing other modules to say require 'foo', and have the .rb
be loaded, which in turn loads the C-extension.

I'm wondering if there's a recommended platform-independent
way to do this? For instance, on OS X, C-extensions end in
".bundle" not ".so".

I wouldn't mind even saying require "foo.#{DLEXT}", if there
were such a thing available from ruby.

Is there a recommended way to have a .rb file require a C-extension file of the same name in a platform-independent
way? Or is the preferred solution to alter the name of one
of the two files?

Thanks,

Bill

--
share your knowledge. it's a way to achieve immortality.
- h.h. the 14th dali lama

"Bill Kelly" <billk@cts.com> writes:

Hi,

I have foo.rb and foo.so, the C-extension part of the module.

Inside foo.rb, I can put, require 'foo.so', and it works fine,
allowing other modules to say require 'foo', and have the .rb
be loaded, which in turn loads the C-extension.

I'm wondering if there's a recommended platform-independent
way to do this? For instance, on OS X, C-extensions end in
".bundle" not ".so".

I wouldn't mind even saying require "foo.#{DLEXT}", if there
were such a thing available from ruby.

Is there a recommended way to have a .rb file require a
C-extension file of the same name in a platform-independent
way? Or is the preferred solution to alter the name of one
of the two files?

Thanks,

Bill

An alternative: call the C bit "foo_ext.so" (say) and then in "foo.rb"
just do "require 'foo_ext'"?

Bill Kelly wrote:

Hi,

I have foo.rb and foo.so, the C-extension part of the module.

Inside foo.rb, I can put, require 'foo.so', and it works fine,
allowing other modules to say require 'foo', and have the .rb
be loaded, which in turn loads the C-extension.

I'm wondering if there's a recommended platform-independent
way to do this? For instance, on OS X, C-extensions end in
".bundle" not ".so".

I wouldn't mind even saying require "foo.#{DLEXT}", if there
were such a thing available from ruby.

Is there a recommended way to have a .rb file require a C-extension file of the same name in a platform-independent
way? Or is the preferred solution to alter the name of one
of the two files?

Thanks,

Bill

You can just always use ".so". Ruby is clever enough to figure out what ".so" really means on the current platform.

harp:~ > ruby -r yaml -r rbconfig -e' y Config::CONFIG '|egrep DLEXT
DLEXT2: ""
DLEXT: so

Aha! TYVM. I'd been grepping the C source. . . .

Regards,

Bill

···

From: <ara.t.howard@noaa.gov>