Building (hackishly) rubygems from CMake-based tarballs
2012 January 19
Here is my attempt was making a user-space bundle install of the SimGrid’s Ruby bindings. I created a gemspec for the source tarball in a hackish way. Basically I just made a system “cmake .” call in the extconf.rb file when building the gem extensions. Here’s the result:
$ cat Gemfile source :rubygems gem "simgrid-ruby" $ SIMGRID_ROOT=/opt/simgrid-3.6.2 bundle install --path vendor ... ... make install [ 66%] Built target SG_ruby [100%] Built target SG_rubydag Install the project... -- Install configuration: "" CMake Error at cmake_install.cmake:47 (FILE): file cannot create directory: /usr/local/ruby/1.9.1/x86_64-linux. Maybe need administrative privileges. make: *** [install] Error 1 -edit Gemfile $ cat Gemfile source :rubygems gem "simgrid-ruby", :path => "~/tmp/simgrid-ruby" # where I have simgrid-ruby.git cloned $ SIMGRID_ROOT=/opt/simgrid-3.6.2 bundle install /home/aespinosa/LocalDisk/opt/ruby/lib/ruby/1.9.1/yaml.rb:56:in `': Using simgrid-ruby (0.0.4890e3f) from source at ~/tmp/simgrid-ruby Using bundler (1.0.21) Updating .gem files in vendor/cache * simgrid-ruby at `~/tmp/simgrid-ruby` will not be cached. Your bundle is complete! It was installed into ./vendor $ cd vendor/ruby/1.9.1/gems/simgrid-ruby-0.0.4890e3f/examples/ $ bundle exec ruby MasterSlave.rb Tremblay:Master:(1) 0.000000] [ruby/INFO] args=20 [Tremblay:Master:(1) 0.000000] [ruby/INFO] args=50000000 [Tremblay:Master:(1) 0.000000] [ruby/INFO] args=1000000 [Tremblay:Master:(1) 0.000000] [ruby/INFO] args=4 [Tremblay:Master:(1) 0.000000] [ruby/INFO] Master Sending Task_0 to slave 0 with Compute Size 50000000.0 [Tremblay:Master:(1) 0.215872] [ruby/INFO] Master Sending Task_1 to slave 1 with Compute Size 50000000.0 [Tremblay:Master:(1) 0.381834] [ruby/INFO] Master Sending Task_2 to slave 2 with Compute Size 50000000.0 ... ... [Bourassa:Slave:(2) 6.234851] [ruby/INFO] Slave 'slave 0' done executing task Task_16. [Fafard:Slave:(4) 6.243210] [ruby/INFO] Slave 'slave 2' done executing task Task_18. [Ginette:Slave:(5) 6.759426] [ruby/INFO] Slave 'slave 3' done executing task Task_19. [Tremblay:Master:(1) 6.772657] [ruby/INFO] Master : Everything's Done Simulation time : 6.77266 $
Sort of works! Basically since rubygems installed the entire manifest (I placed everything in the tarball) on the gem directory, the lib/.so and lib/.rb files somehow fall in place. Problems arise in the build when the gem installer cannot replace the RUBYARCHDIR string in the Makefile to install it in isolation (https://github.com/rubygems/rubygems/blob/master/lib/rubygems/ext/builder.rb)
I made a fork of a repository with the gemspec package in https://github.com/aespinosa/simgrid-ruby . For now this hackish-setup satisfies my needs of a user-space installation of simgrid-ruby bindings.