Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow Leopard

I posted the below question to the Shoes mailing list and got back the
following responses:

“Could you post your problem into ruby-list ML?
I think we need Ruby/GTK2 developer’s help.”

I am now posting the issue here to see if Ruby/GTK2 developers can help?
Thanks
Timothy

-------START OF ORIGINAL EMAIL------------------

I am trying to get green shoes to work on Snow Leopard. I used homebrew
to
install gtk+ and rvm to install ruby 1.9.2-p180. I believe that I
installed
cairo v1.10.0 correctly, but when I try gtk2 0.90.5 I get the error
messages
below. I have tried all I know. Any advice?

barnes7td (Timothy)

-------CONSOLE OUTPUT--------------------------------

Building native extensions. This could take a while…
ERROR: Error installing cairo:
ERROR: Failed to build gem native extension.

    /Users/Timothy/.rvm/rubies/ruby-1.9.2-p180/bin/ruby extconf.rb

checking for GCC… yes
checking for Win32 OS… no
checking for Mac OS X… yes
checking for cairo version (>= 1.2.0)… yes
checking for HAVE_RUBY_ST_H in ruby.h… yes
checking for HAVE_RUBY_IO_H in ruby.h… yes
checking for rb_errinfo() in ruby.h… yes
checking for enum ruby_value_type in ruby.h… yes
creating Makefile

make
gcc -I.
-I/Users/Timothy/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/x86_64-darwin10.6.0
-I/Users/Timothy/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/ruby/backward
-I/Users/Timothy/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1 -I.
-DRB_CAIRO_COMPILATION -DHAVE_RB_ERRINFO
-DHAVE_TYPE_ENUM_RUBY_VALUE_TYPE
-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -O3 -ggdb -Wextra
-Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings
-Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long
-fno-common -pipe -Wall -I/opt/local/include/cairo
-I/opt/local/include/freetype2 -I/opt/local/include
-I/opt/local/include/libpng12 -I/usr/X11/include -DXTHREADS -o
rb_cairo.o
-c rb_cairo.c
In file included from rb_cairo.c:17:
rb_cairo.h:20:19: error: cairo.h: No such file or directory
In file included from rb_cairo.c:17:
rb_cairo.h:205: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:206: error: expected ) before * token
rb_cairo.h:208: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:209: error: expected ) before * token
rb_cairo.h:211: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:212: error: expected ) before * token
rb_cairo.h:219: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:220: error: expected ) before * token
rb_cairo.h:222: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:223: error: expected ) before * token
rb_cairo.h:225: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:226: error: expected ) before * token
rb_cairo.h:228: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:229: error: expected ) before * token
rb_cairo.h:231: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:232: error: expected ) before * token
rb_cairo.h:234: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:235: error: expected ) before * token
rb_cairo.h:237: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:238: error: expected ) before * token
rb_cairo.h:245: error: expected =, , ;, asm or attribute
before * token
rb_cairo.h:246: error: expected ) before * token
rb_cairo.h:248: error: expected ) before * token
rb_cairo.h:293: error: expected =, , ;, asm or attribute
before rb_cairo_operator_from_ruby_object
rb_cairo.h:294: error: expected =, , ;, asm or attribute
before rb_cairo_antialias_from_ruby_object
rb_cairo.h:295: error: expected =, , ;, asm or attribute
before rb_cairo_fill_rule_from_ruby_object
rb_cairo.h:296: error: expected =, , ;, asm or attribute
before rb_cairo_line_cap_from_ruby_object
rb_cairo.h:297: error: expected =, , ;, asm or attribute
before rb_cairo_line_join_from_ruby_object
rb_cairo.h:298: error: expected =, , ;, asm or attribute
before rb_cairo_font_slant_from_ruby_object
rb_cairo.h:299: error: expected =, , ;, asm or attribute
before rb_cairo_font_weight_from_ruby_object
rb_cairo.h:300: error: expected =, , ;, asm or attribute
before rb_cairo_subpixel_order_from_ruby_object
rb_cairo.h:301: error: expected =, , ;, asm or attribute
before rb_cairo_hint_style_from_ruby_object
rb_cairo.h:302: error: expected =, , ;, asm or attribute
before rb_cairo_hint_metrics_from_ruby_object
rb_cairo.h:303: error: expected =, , ;, asm or attribute
before rb_cairo_path_data_type_from_ruby_object
rb_cairo.h:304: error: expected =, , ;, asm or attribute
before rb_cairo_content_from_ruby_object
rb_cairo.h:305: error: expected =, , ;, asm or attribute
before rb_cairo_format_from_ruby_object
rb_cairo.h:306: error: expected =, , ;, asm or attribute
before rb_cairo_extend_from_ruby_object
rb_cairo.h:307: error: expected =, , ;, asm or attribute
before rb_cairo_filter_from_ruby_object
rb_cairo.h:331: error: expected ) before status
In file included from rb_cairo.c:18:
rb_cairo_private.h:81: error: expected declaration specifiers or …
before cairo_glyph_t
rb_cairo_private.h:84: error: expected =, , ;, asm or
attribute before rb_cairo__is_kind_of
rb_cairo_private.h:112: error: expected =, , ;, asm or
attribute before rb_cairo__exception_to_status
rb_cairo.c: In function rb_cairo_satisfied_version:
rb_cairo.c:40: error: CAIRO_VERSION_MAJOR undeclared (first use in this
function)
rb_cairo.c:40: error: (Each undeclared identifier is reported only once
rb_cairo.c:40: error: for each function it appears in.)
rb_cairo.c:40: error: CAIRO_VERSION_MINOR undeclared (first use in this
function)
rb_cairo.c:40: error: CAIRO_VERSION_MICRO undeclared (first use in this
function)
rb_cairo.c:31: warning: unused parameter self
rb_cairo.c: In function Init_cairo:
rb_cairo.c:59: error: CAIRO_VERSION_MAJOR undeclared (first use in this
function)
rb_cairo.c:60: error: CAIRO_VERSION_MINOR undeclared (first use in this
function)
rb_cairo.c:61: error: CAIRO_VERSION_MICRO undeclared (first use in this
function)
rb_cairo.c:63: warning: implicit declaration of function cairo_version
make: *** [rb_cairo.o] Error 1

Gem files will remain installed in
/Users/Timothy/.rvm/gems/ruby-1.9.2-p180/gems/cairo-1.10.0 for
inspection.
Results logged to
/Users/Timothy/.rvm/gems/ruby-1.9.2-p180/gems/cairo-1.10.0/ext/cairo/gem_make.out

--------END OF OUTPUT-----------------

Hi,

In [email protected]
“Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow
Leopard” on Sat, 9 Jul 2011 11:15:08 +0900,
Timothy B. [email protected] wrote:

checking for HAVE_RUBY_IO_H in ruby.h… yes
-D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -O3 -ggdb -Wextra
-Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings
-Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long
-fno-common -pipe -Wall -I/opt/local/include/cairo
-I/opt/local/include/freetype2 -I/opt/local/include
-I/opt/local/include/libpng12 -I/usr/X11/include -DXTHREADS -o rb_cairo.o
-c rb_cairo.c
In file included from rb_cairo.c:17:
rb_cairo.h:20:19: error: cairo.h: No such file or directory

It means rcairo can’t find cairo.h. Could you check
/opt/local/include/cairo has cairo.h?

Thanks,

I can’t find that directory at all. is it ~/opt/local/…? much less
the
file

Hi,

In [email protected]
“Re: Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow
Leopard” on Sat, 9 Jul 2011 13:07:34 +0900,
Timothy B. [email protected] wrote:

I can’t find that directory at all. is it ~/opt/local/…? much less the
file

How did you install cairo 1.10.0?
rcairo needs to find cairo.pc for detecting include path of
cairo. cairo.pc has the information.

Thanks,

Here are the instructions that I followed (from green shoes github
site):
Via Homebrew

(untested, but probably the recommended approach for Intel Macs)

This approach would be basically as per the Macports instructions, but
using
the equivalent Homebrew http://mxcl.github.com/homebrew/ commands to
install Ruby 1.9 and GTK2. So, something like:

  1. Install Homebrew
    http://wiki.github.com/mxcl/homebrew/installation
  2. Install Ruby 1.9 brew install ruby (Alternatively, you may want to
    use RVM http://rvm.beginrescueend.com/ to install Ruby1.9)
  3. Install GTK2 brew install gtk+ (This should pull in all other
    dependencies such as Cairo)
  4. You may then have to update the Rubygems version if it isn’t
    greater
    than 1.3.7 (updating shouldn’t do any harm anyway): sudo gem update
    –system
  5. Install Ruby bindings: sudo gem install cairo -v=1.10.0 and sudo
    gem
    install gtk2 -v=0.90.5
  6. Install the Green Shoes gem: sudo gem install green_shoes

I belive gtk+ is supposed to install cairo. I tried step 5 again tonight
and
now I get errors.

kou,

I tried port install cairo and opt/local/include was created but no
cairo.h

Timothy

Hi,

In CAESf[email protected]domain.invalid
“Re: Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow
Leopard” on Sat, 9 Jul 2011 13:26:24 +0900,
Timothy B. [email protected] wrote:

Here are the instructions that I followed (from green shoes github site):

Coud you try this instructions?
http://rabbit-shockers.org/en/install/homebrew.html

Thanks,

If you installed Ruby with rvm, then everything is done locally, so you

should not need “sudo” for installing the gems. I am pretty sure that
using

sudo with rvm can cause issues.

Yep, because sudo switches users, and so that changes your environment,
which is the whole thing that rvm is based on. rvmsudo lets you elevate
your
privledges while not screwing everything up.

I am also pretty sure that if you use both macports and homebrew, then this
can cause you issues. The homebrew page should have more information about
its compatibility with macports. At the very least, you’ll probably have to
uninstall the cairo that you installed with macports.

Yep, they dont’ play nice:
http://superuser.com/questions/181337/is-it-safe-to-install-both-homebrew-and-macports-on-the-same-machine

On Fri, Jul 8, 2011 at 11:26 PM, Timothy B. [email protected]
wrote:

  1. Install Homebrew http://wiki.github.com/mxcl/homebrew/installation

If you installed Ruby with rvm, then everything is done locally, so you
should not need “sudo” for installing the gems. I am pretty sure that
using
sudo with rvm can cause issues.

On Fri, Jul 8, 2011 at 11:38 PM, Timothy B. [email protected]
wrote:

kou,

I tried port install cairo and opt/local/include was created but no
cairo.h

I think macports requires sudo “sudo port install” because of where it
installs to.

I am also pretty sure that if you use both macports and homebrew, then
this
can cause you issues. The homebrew page should have more information
about
its compatibility with macports. At the very least, you’ll probably have
to
uninstall the cairo that you installed with macports.

Have you tried ‘rvm install ruby-gnome2’ yet?
That’s why I ended up here was to find out why my rb_cairo.h was
missing.
Will https://github.com/rcairo/rcairo/blob/master/ext/cairo/rb_cairo.h
fix it?

Issue Resolved.

It was apparent macports and hombrew were conflicting. I deleted
macports
and homebrew and reinstalled homebrew and followed the instructions on
the
green shoes github page. Using RVM and Ruby 1.9.2, everything worked
perfectly. I’m not sure but I think macports could have been affecting
RVM
b/c I had had several issue (even prior to this) using gem install on
RVM.

Lesson: choose Homebrew or Macports, but not both.

Thanks for the advice.

Timothy