librelist archives

« back to archive

Shoes and RubyInstaller

Shoes and RubyInstaller

From:
Chuck Remes
Date:
2011-09-21 @ 16:42
[cross-posted to RubyInstaller]

I'm helping Steve Klabnik get the Shoes recipes updated to use the latest 
RubyInstaller so we can cut a new release of Shoes for Windows using MRI 
1.9.2. He and I got together last week and started looking through the old
RubyInstaller fork [1] that handled the build and comparing it to the 
latest RubyInstaller master. There has been quite a bit of divergence 
between the two codebases in the last 2 years.

These are my observations while comparing the two RubyInstaller codebases.
I am recording my observations to the ML rather than irc so that there is 
a persistent record. I am hopeful that those with greater knowledge of 
RubyInstaller can correct me where my conclusions are incorrect.

1. Dependencies

The hardest problem is making sure all of the dependencies for Shoes are 
built. It appears that all dependent libraries *must* be listed in 
config/ruby_installer.rb. I assume that the default task of rake is to 
make sure all of these dependencies are downloaded, extracted, prepared, 
etc. and ready for linking in the PATH (or maybe not... see #5 below).

2. Checkpoint

The #checkpoint method is called before most work in the dependencies 
recipes is executed. It looks like the return value of the call to 
#checkpoint is a Rake::Task instance. This was non-obvious to me and took 
a few minutes to figure out.

I interpret the use of #checkpoint as a way for each recipe to enhance the
common tasks needed to build any library. Instead of subclassing a rake 
task, it can be extended via customization. Then after these 
customizations are done, the work is finished off by a call to a top-level
task (:download, :extract, :prepare, :configure, :compile, :install) with 
the newly customized task as a dependency. 

3. Shoes Dependencies

We need to make new recipes for these libraries:

cairo
git
glib
libjpeg
libpng
libungif
pango
port_audio
readline (though the new RubyInstaller uses rbreadline)
sqlite3
winhttp


4. Modify config/ruby_installer.rb

The URL, file names, sandbox paths and a few other details all need to be 
added to config/ruby_installer.rb following the format of the existing 
OpenStruct templates.

5. shoes.rake

Next, we need a shoes.rake to kick off the compile. The shoes.rake in the 
old fork is way out of date and probably isn't much help with the latest 
way of doing things in RubyInstaller. My guess is that we should use the 
ruby19.rake file as a template and modify each of the main tasks 
(:download, :prepare, etc) to make sure all of the shoes dependencies get 
built.

Comments are welcome.

cr

[1]  https://github.com/ashbb/rubyinstaller

Re: [shoes] Shoes and RubyInstaller

From:
Steve Klabnik
Date:
2011-09-21 @ 17:38
I'm not seing this on the RubyInstaller list, by the way...

Thanks for posting this. I don't have any initial comments, let's see
if anyone on that list has thoughts, too.