[Rubygems-developers] Gem::Ext::RakeBuilder ignores custom Rakefile name

Yaohan Chen yaohan.chen at gmail.com
Thu Jun 19 00:04:41 EDT 2008

Sorry, please ignore what I wrote about both Rakefile and mkrf_conf in the 
filename, I just noticed that the RakeBuilder is invoked when the filename 
contains *either* Rakefile or mkrf_conf.

Yaohan Chen

On Wednesday 18 June 2008 11:59:59 pm Yaohan Chen wrote:
> Hi,
> I'm working on a project which compiles and uses some platform dependent
> files, but they are not built from C files. The method to generate those
> files is already in the project's Rakefile as a task, so I wanted to use
> gem's Rakefile extension builder. I have
>   spec.extensions << "Rakefile.ext"
> But the extension building phase fails saying Rakefile cannot be found.
> Looking lib/rubygems/ext/rake_builder.rb lines 11-21,
>   def self.build(extension, directory, dest_path, results)
>     if File.basename(extension) =~ /mkrf_conf/i then
>       cmd = "#{Gem.ruby} #{File.basename extension}"
>       cmd << " #{ARGV.join " "}" unless ARGV.empty?
>       run cmd, results
>     end
>     cmd = ENV['rake'] || 'rake'
>     cmd << " RUBYARCHDIR=#{dest_path} RUBYLIBDIR=#{dest_path}
>     run cmd, results
> It seems that if the Rakefile contains mkrf_conf in the basename (btw I see
> some mkrf_conf.rb files on the web, but none with both Rakefile and
> mkmf_conf in its name) then it is treated as a "configure script", it is
> executed and afterwards a Rakefile is expected to be created. Otherwise,
> the file must be named Rakefile. If this is by design, there is a usability
> problem in accepting any filename containing Rakefile in spec.extensions.
> There is also a problem with requiring the file to be called Rakefile. The
> project already has a Rakefile containing various tasks such as gem, and a
> task for building the extension. It doesn't make sense to have the default
> rule build the extension, which is why I am trying to use a different
> Rakefile. But if it's possible to name the task to execute, along with the
> Rakefile in specification.extensions, I would have no problem.
> Finally, is the Rakefile expected to both build and install the extensions
> in its default task?
> Thank you in advance.
> Yaohan Chen

More information about the Rubygems-developers mailing list