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
_______________________________________________
Rubygems-developers mailing list
Rubygems-developers@rubyforge.org
http://rubyforge.org/mailman/listinfo/rubygems-developers

Reply via email to