Gem Platform Issues

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Gem Platform Issues

keithrbennett
All -

I wrote a gem that calls a Java library using RVM if running under MRI Ruby, and just calls the Java library in the same (J)Ruby VM when running in JRuby.

I've built the gem in JRuby, installed it, and required it in (a JRuby) irb, successfully.

However, I have another gem that is dependent on it, and I can't get it not to try to build rjb.

I have a feeling it has something to do with the gemspec, but I'm not sure.  Assuming my gem's name is 'cv' (it's not), here's what I think is the relevant code in the gemspec:

  is_jruby = /java/ === RUBY_PLATFORM
  spec.platform = 'java' if is_jruby

  if is_jruby
    spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"
    spec.add_dependency "yajl-ruby"  # For JSON parsing
  end


Any idea what I might be doing wrong?  The error message I get when running bundler is below.

Thanks,
Keith



/Users/kbennett/.rvm/rubies/jruby-1.7.10/bin/jruby extconf.rb
/Users/kbennett/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/mkmf.rb:14: Use RbConfig instead of obsolete and deprecated Config.
mkmf.rb can't find header files for ruby at /Users/kbennett/.rvm/rubies/jruby-1.7.10/lib/native/include/ruby/ruby.h

extconf failed, uncaught signal 1

Gem files will remain installed in /Users/kbennett/.rvm/gems/jruby-1.7.10/gems/rjb-1.4.9 for inspection.
Results logged to /Users/kbennett/.rvm/gems/jruby-1.7.10/extensions/universal-java-1.7/1.9/rjb-1.4.9/gem_make.out
An error occurred while installing rjb (1.4.9), and Bundler cannot continue.
Make sure that `gem install rjb -v '1.4.9'` succeeds before bundling.


Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

christian

On Thu, Feb 6, 2014 at 9:35 PM, Keith Bennett <[hidden email]> wrote:
spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"


both statements will use the latest cv gem, at least on clean local gem repo.

are there two cv one for MRI and one for java, i.e. how does the cv.gemspec look like ?

the install of gem should honor the current platform and install the respective platform gem if available.

- christian
Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

Christian MICHON
In reply to this post by keithrbennett
Road to hell... Why don't you generate 2 versions? 1 MRI specific and 1 for java platform.

If you've tests in your gems, you'll need also to handle RUBY_PLATFORM and run the tests for each platform, switching environments in your shell. If you use RVM, you might even confuse this more...

If you've 2 versions (one for each platform), you need to test on each platform only what is specific.


On Thu, Feb 6, 2014 at 10:35 PM, Keith Bennett <[hidden email]> wrote:
All -

I wrote a gem that calls a Java library using RVM if running under MRI Ruby, and just calls the Java library in the same (J)Ruby VM when running in JRuby.

I've built the gem in JRuby, installed it, and required it in (a JRuby) irb, successfully.

However, I have another gem that is dependent on it, and I can't get it not to try to build rjb.

I have a feeling it has something to do with the gemspec, but I'm not sure.  Assuming my gem's name is 'cv' (it's not), here's what I think is the relevant code in the gemspec:

  is_jruby = /java/ === RUBY_PLATFORM
  spec.platform = 'java' if is_jruby

  if is_jruby
    spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"
    spec.add_dependency "yajl-ruby"  # For JSON parsing
  end


Any idea what I might be doing wrong?  The error message I get when running bundler is below.

Thanks,
Keith



/Users/kbennett/.rvm/rubies/jruby-1.7.10/bin/jruby extconf.rb
/Users/kbennett/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/mkmf.rb:14: Use RbConfig instead of obsolete and deprecated Config.
mkmf.rb can't find header files for ruby at /Users/kbennett/.rvm/rubies/jruby-1.7.10/lib/native/include/ruby/ruby.h

extconf failed, uncaught signal 1

Gem files will remain installed in /Users/kbennett/.rvm/gems/jruby-1.7.10/gems/rjb-1.4.9 for inspection.
Results logged to /Users/kbennett/.rvm/gems/jruby-1.7.10/extensions/universal-java-1.7/1.9/rjb-1.4.9/gem_make.out
An error occurred while installing rjb (1.4.9), and Bundler cannot continue.
Make sure that `gem install rjb -v '1.4.9'` succeeds before bundling.





--
Christian
Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

keithrbennett
In reply to this post by christian
Christian -

Thanks for responding.  The cv.gemspec includes:

  is_jruby = /java/ === RUBY_PLATFORM
  if is_jruby
    spec.platform = 'java'
  end
...
  unless is_jruby
    spec.add_dependency 'rjb'
    spec.add_development_dependency "pry-debugger"
  end

When I build the gem, the Java version is named cv-0.4.3-java.gem. (The "-java" is appended automatically.)

In my other gemspec, do I have to explicitly specify that I want a Java version of the gem, or should it automatically find it if spec.platform == 'java'?

There are 2 separate versions of the gem created -- is that what you meant in your second message?

Thanks,
Keith



On Fri, Feb 7, 2014 at 6:03 AM, christian <[hidden email]> wrote:

On Thu, Feb 6, 2014 at 9:35 PM, Keith Bennett <[hidden email]> wrote:
spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"


both statements will use the latest cv gem, at least on clean local gem repo.

are there two cv one for MRI and one for java, i.e. how does the cv.gemspec look like ?

the install of gem should honor the current platform and install the respective platform gem if available.

- christian

Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

keithrbennett
Never mind, it appears to work now.

Thanks for your help, Christian.

- Keith


On Fri, Feb 7, 2014 at 11:56 AM, Keith Bennett <[hidden email]> wrote:
Christian -

Thanks for responding.  The cv.gemspec includes:


  is_jruby = /java/ === RUBY_PLATFORM
  if is_jruby
    spec.platform = 'java'
  end
...
  unless is_jruby
    spec.add_dependency 'rjb'
    spec.add_development_dependency "pry-debugger"
  end

When I build the gem, the Java version is named cv-0.4.3-java.gem. (The "-java" is appended automatically.)

In my other gemspec, do I have to explicitly specify that I want a Java version of the gem, or should it automatically find it if spec.platform == 'java'?

There are 2 separate versions of the gem created -- is that what you meant in your second message?

Thanks,
Keith



On Fri, Feb 7, 2014 at 6:03 AM, christian <[hidden email]> wrote:

On Thu, Feb 6, 2014 at 9:35 PM, Keith Bennett <[hidden email]> wrote:
spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"


both statements will use the latest cv gem, at least on clean local gem repo.

are there two cv one for MRI and one for java, i.e. how does the cv.gemspec look like ?

the install of gem should honor the current platform and install the respective platform gem if available.

- christian


Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

Christian MICHON
In reply to this post by keithrbennett

The 2nd message is from me. 2 Christians replied.

Glad that the solution worked. And yes I meant for 2 versions of the gem to be created, instead of a generic.

On Feb 7, 2014 5:58 PM, "Keith Bennett" <[hidden email]> wrote:
Christian -

Thanks for responding.  The cv.gemspec includes:

  is_jruby = /java/ === RUBY_PLATFORM
  if is_jruby
    spec.platform = 'java'
  end
...
  unless is_jruby
    spec.add_dependency 'rjb'
    spec.add_development_dependency "pry-debugger"
  end

When I build the gem, the Java version is named cv-0.4.3-java.gem. (The "-java" is appended automatically.)

In my other gemspec, do I have to explicitly specify that I want a Java version of the gem, or should it automatically find it if spec.platform == 'java'?

There are 2 separate versions of the gem created -- is that what you meant in your second message?

Thanks,
Keith



On Fri, Feb 7, 2014 at 6:03 AM, christian <[hidden email]> wrote:

On Thu, Feb 6, 2014 at 9:35 PM, Keith Bennett <[hidden email]> wrote:
spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"


both statements will use the latest cv gem, at least on clean local gem repo.

are there two cv one for MRI and one for java, i.e. how does the cv.gemspec look like ?

the install of gem should honor the current platform and install the respective platform gem if available.

- christian

Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

christian
Christian is a very common name in my country
:)






On Fri, Feb 7, 2014 at 9:24 PM, Christian MICHON <[hidden email]> wrote:

The 2nd message is from me. 2 Christians replied.

Glad that the solution worked. And yes I meant for 2 versions of the gem to be created, instead of a generic.

On Feb 7, 2014 5:58 PM, "Keith Bennett" <[hidden email]> wrote:
Christian -

Thanks for responding.  The cv.gemspec includes:

  is_jruby = /java/ === RUBY_PLATFORM
  if is_jruby
    spec.platform = 'java'
  end
...
  unless is_jruby
    spec.add_dependency 'rjb'
    spec.add_development_dependency "pry-debugger"
  end

When I build the gem, the Java version is named cv-0.4.3-java.gem. (The "-java" is appended automatically.)

In my other gemspec, do I have to explicitly specify that I want a Java version of the gem, or should it automatically find it if spec.platform == 'java'?

There are 2 separate versions of the gem created -- is that what you meant in your second message?

Thanks,
Keith



On Fri, Feb 7, 2014 at 6:03 AM, christian <[hidden email]> wrote:

On Thu, Feb 6, 2014 at 9:35 PM, Keith Bennett <[hidden email]> wrote:
spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"


both statements will use the latest cv gem, at least on clean local gem repo.

are there two cv one for MRI and one for java, i.e. how does the cv.gemspec look like ?

the install of gem should honor the current platform and install the respective platform gem if available.

- christian


Reply | Threaded
Open this post in threaded view
|

Re: Gem Platform Issues

keithrbennett
Oh!  Sorry, yes, I thought you were the same guy.

Anyway, thanks to both of you! ;)

- Keith


On Feb 7, 2014, at 4:59 PM, christian <[hidden email]> wrote:

Christian is a very common name in my country
:)






On Fri, Feb 7, 2014 at 9:24 PM, Christian MICHON <[hidden email]> wrote:

The 2nd message is from me. 2 Christians replied.

Glad that the solution worked. And yes I meant for 2 versions of the gem to be created, instead of a generic.

On Feb 7, 2014 5:58 PM, "Keith Bennett" <[hidden email]> wrote:
Christian -

Thanks for responding.  The cv.gemspec includes:

  is_jruby = /java/ === RUBY_PLATFORM
  if is_jruby
    spec.platform = 'java'
  end
...
  unless is_jruby
    spec.add_dependency 'rjb'
    spec.add_development_dependency "pry-debugger"
  end

When I build the gem, the Java version is named cv-0.4.3-java.gem. (The "-java" is appended automatically.)

In my other gemspec, do I have to explicitly specify that I want a Java version of the gem, or should it automatically find it if spec.platform == 'java'?

There are 2 separate versions of the gem created -- is that what you meant in your second message?

Thanks,
Keith



On Fri, Feb 7, 2014 at 6:03 AM, christian <[hidden email]> wrote:

On Thu, Feb 6, 2014 at 9:35 PM, Keith Bennett <[hidden email]> wrote:
spec.add_dependency "cv", ">= 0.3.1"
  else
    spec.add_dependency "cv", ">= 0.1.0"


both statements will use the latest cv gem, at least on clean local gem repo.

are there two cv one for MRI and one for java, i.e. how does the cv.gemspec look like ?

the install of gem should honor the current platform and install the respective platform gem if available.

- christian