.rb file includes c-extension of same name?


#1

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


#2

On Mon, 20 Mar 2006, Bill K. wrote:

“.bundle” not “.so”.
Thanks,

Bill

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

-a


#3

From: removed_email_address@domain.invalid

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


#4

Bill K. wrote:

“.bundle” not “.so”.
Thanks,

Bill

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


#5

“Bill K.” removed_email_address@domain.invalid writes:

“.bundle” not “.so”.
Thanks,

Bill

An alternative: call the C bit “foo_ext.so” (say) and then in “foo.rb”
just do “require ‘foo_ext’”?