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 <CAESf5icq=auwH+8HEAKpHtmDRWfgyBzuprcT2wMVVSUXXhkTEw@mail.gmail.com>
  "Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow Leopard" on Sat, 9 Jul 2011 11:15:08 +0900,

···

Timothy Barnes <barnes7td@gmail.com> wrote:

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

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

Thanks,
--
kou

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

···

On Fri, Jul 8, 2011 at 10:59 PM, Kouhei Sutou <kou@cozmixng.org> wrote:

Hi,

In <CAESf5icq=auwH+8HEAKpHtmDRWfgyBzuprcT2wMVVSUXXhkTEw@mail.gmail.com>
"Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow Leopard"
on Sat, 9 Jul 2011 11:15:08 +0900, > Timothy Barnes <barnes7td@gmail.com> wrote:

> 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

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

Thanks,
--
kou

Hi,

In <CAESf5idUVQeAfXK=NEA9aRg5rRsc-qO7S7-A-z-qerq+LwpxOQ@mail.gmail.com>
  "Re: Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow Leopard" on Sat, 9 Jul 2011 13:07:34 +0900,

···

Timothy Barnes <barnes7td@gmail.com> 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,
--
kou

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/&gt; commands to
install Ruby 1.9 and GTK2. So, something like:

   1. Install Homebrew <http://wiki.github.com/mxcl/homebrew/installation&gt;
   2. Install Ruby 1.9 brew install ruby (Alternatively, you may want to
   use RVM <http://rvm.beginrescueend.com/&gt; 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.

···

On Sat, Jul 9, 2011 at 12:20 AM, Kouhei Sutou <kou@cozmixng.org> wrote:

Hi,

In <CAESf5idUVQeAfXK=NEA9aRg5rRsc-qO7S7-A-z-qerq+LwpxOQ@mail.gmail.com>
"Re: Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow
Leopard" on Sat, 9 Jul 2011 13:07:34 +0900,
  Timothy Barnes <barnes7td@gmail.com> 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,
--
kou

kou,

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

Timothy

···

On Sat, Jul 9, 2011 at 12:26 AM, Timothy Barnes <barnes7td@gmail.com> wrote:

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/&gt; commands to
install Ruby 1.9 and GTK2. So, something like:

   1. Install Homebrew <http://wiki.github.com/mxcl/homebrew/installation&gt;
  2. Install Ruby 1.9 brew install ruby (Alternatively, you may want to
  use RVM <http://rvm.beginrescueend.com/&gt; 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.

On Sat, Jul 9, 2011 at 12:20 AM, Kouhei Sutou <kou@cozmixng.org> wrote:

> Hi,
>
> In <CAESf5idUVQeAfXK=NEA9aRg5rRsc-qO7S7-A-z-qerq+LwpxOQ@mail.gmail.com>
> "Re: Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow
> Leopard" on Sat, 9 Jul 2011 13:07:34 +0900,
> Timothy Barnes <barnes7td@gmail.com> 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,
> --
> kou
>
>

Hi,

In <CAESf5if_b5ZPUnA5yC_t6hRUK4bnrbZnkRjRH6SOonGbg=r5zQ@mail.gmail.com>
  "Re: Fatal Error with Ruby/GTK2, Homebrew, Green Shoes, and OSX Snow Leopard" on Sat, 9 Jul 2011 13:26:24 +0900,

···

Timothy Barnes <barnes7td@gmail.com> 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,
--
kou

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/&gt; commands to
install Ruby 1.9 and GTK2. So, something like:

  1. Install Homebrew <http://wiki.github.com/mxcl/homebrew/installation&gt;
  2. Install Ruby 1.9 brew install ruby (Alternatively, you may want to
  use RVM <http://rvm.beginrescueend.com/&gt; 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

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:26 PM, Timothy Barnes <barnes7td@gmail.com> wrote:

On Fri, Jul 8, 2011 at 11:38 PM, Timothy Barnes <barnes7td@gmail.com> 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.

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:

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