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.