# Finding ruby.h

**URL:** <https://www.ruby-forum.com/t/finding-ruby-h/157657>\
**Category:** Ruby\
**Created:** [January 14, 2009, 6:21am UTC](https://www.ruby-forum.com/t/finding-ruby-h/157657 "2009-01-14T06:21:13Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![John\_Ky](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c4cdca/32.png) [@John\_Ky](https://www.ruby-forum.com/u/John_Ky)\
**Post date:** [January 14, 2009, 6:21am UTC](https://www.ruby-forum.com/t/finding-ruby-h/157657/1 "2009-01-14T06:21:13Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![John\_Ky](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c4cdca/32.png) [@John\_Ky](https://www.ruby-forum.com/u/John_Ky)\
**Post date:** [January 14, 2009, 6:46am UTC](https://www.ruby-forum.com/t/finding-ruby-h/157657/2 "2009-01-14T06:46:21Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![John\_Ky](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c4cdca/32.png) [@John\_Ky](https://www.ruby-forum.com/u/John_Ky)\
**Post date:** [January 14, 2009, 6:02pm UTC](https://www.ruby-forum.com/t/finding-ruby-h/157657/3 "2009-01-14T18:02:32Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![John\_Ky](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c4cdca/32.png) [@John\_Ky](https://www.ruby-forum.com/u/John_Ky)\
**Post date:** [January 15, 2009, 5:54am UTC](https://www.ruby-forum.com/t/finding-ruby-h/157657/4 "2009-01-15T05:54:56Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![John\_Ky](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c4cdca/32.png) [@John\_Ky](https://www.ruby-forum.com/u/John_Ky)\
**Post date:** [January 14, 2009, 6:40pm UTC](https://www.ruby-forum.com/t/finding-ruby-h/157657/5 "2009-01-14T18:40:42Z")

</div>

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](http://www.cmake.org)

Dave H.
