Finding ruby.h


#1

Hi,

I’m building ruby extensions across many different OSes and
architectures.

Does anyone know an easy way to find ruby.h on any given system?

I’m told that perl has a “perl -V” or @ENV variable which gives some
paths I
can look through for perl.h.

Does Ruby have an equivalent? Is there a better way to find ruby.h?

Thanks,

-John


#2

On Wed, Jan 14, 2009 at 02:20:00PM +0900, John Ky wrote:

Hi,

I’m building ruby extensions across many different OSes and architectures.

Does anyone know an easy way to find ruby.h on any given system?

I’m told that perl has a “perl -V” or @ENV variable which gives some paths I
can look through for perl.h.

Does Ruby have an equivalent? Is there a better way to find ruby.h?

This works on a couple of my systems:

require 'rbconfig'
loc = File.join( Config::CONFIG['archdir'], 'ruby.h')
if File.exist?( loc ) then
  puts loc
else
  puts "Unable to find ruby.h in #{loc}"
end

enjoy,

-jeremy


#3

John Ky a écrit :

I’m building ruby extensions across many different OSes and architectures.

Does anyone know an easy way to find ruby.h on any given system?

I’m told that perl has a “perl -V” or @ENV variable which gives some paths I
can look through for perl.h.

Does Ruby have an equivalent? Is there a better way to find ruby.h?

My first idea for this kind of problem would be to check GNU autoconf /
configure.sh

LaP


#4

Hi all,

Thanks everyone for your help. I’ve settled with this solution as I’ve
already got it working. Very much appreciated!

-John

On Wed, Jan 14, 2009 at 4:44 PM, Jeremy H.


#5

John Ky wrote:

Does Ruby have an equivalent? Is there a better way to find ruby.h?

Thanks,

-John

I have used CMake to make a SWIG wrapper with success on Windows and
Linux. The FindRuby.cmake script does all of the hard work at locating
Ruby.h. CMake-2.6.2 (and possibly others) includes FindRuby.cmake and
can be used like so:

(Note: FindRuby.cmake doesn’t export RUBY_FOUND, so I create that var
myself)

Main CMakeLists.txt:

SET(RUBY_FOUND FALSE)
FIND_PACKAGE( Ruby)
if(RUBY_INCLUDE_PATH AND RUBY_LIBRARY)
SET(RUBY_FOUND TRUE)
endif(RUBY_INCLUDE_PATH AND RUBY_LIBRARY)

if(RUBY_FOUND)
INCLUDE_DIRECTORIES( ${RUBY_INCLUDE_PATH})
endif(RUBY_FOUND)

CMakeLists.txt for each library in app:

if(RUBY_FOUND)
SET_SOURCE_FILES_PROPERTIES(RbDynamic.i PROPERTIES SWIG_FLAGS
“-autorename”)
SET_SOURCE_FILES_PROPERTIES(RbDynamic.i PROPERTIES CPLUSPLUS ON)
SET_SOURCE_FILES_PROPERTIES(RbDynamic.i PROPERTIES SWIG_FLAGS
“-includeall”)
SWIG_ADD_MODULE( rbdynamic ruby RbDynamic.i )
SWIG_LINK_LIBRARIES( rbdynamic ${RUBY_LIBRARY}
${MIIND_LIBRARY_PREFIX}dynamic
)
endif(RUBY_FOUND)

CMake is a doddle to use if you don’t already know it, and is cross
platform (I’ve only used Windows and Linux). Check it out at
www.cmake.org

Dave H.