Building extensions with Hoe

A

Alex Gutteridge

Hi,

I'm developing a library that includes a C extension, so during
development I need to keep re-compiling the extension before testing.

I'm using Hoe for packaging, so I've added the following task to my
Rakefile.rb which allows me to rebuild the extension using extconf.rb/
make. My library has a further dependency on an external C library
(libR), at the moment this is semi-hardcoded into the script by
referencing the environment variable R_HOME:

desc "Uses extconf.rb and make to build the extension"
task :build_extension do
Dir.chdir('ext')
system("ruby extconf.rb --with-R-dir=$R_HOME")
system("make")
Dir.chdir('..')
end

Two questions (I'm pretty new with Rake/Hoe so forgive me if these
are obvious):

1. The 'build_extension' task works fine, but seems a little hacky,
how do other people build extensions with Rake/Hoe?

2. Can I retrospectively add this task as a dependency of the 'test'
task, so that when I run my tests I can ensure the library is freshly
built?

Alex Gutteridge

Bioinformatics Center
Kyoto University
 
E

Eric Hodel

I'm developing a library that includes a C extension, so during
development I need to keep re-compiling the extension before testing.

I'm using Hoe for packaging, so I've added the following task to my
Rakefile.rb which allows me to rebuild the extension using
extconf.rb/make. My library has a further dependency on an external
C library (libR), at the moment this is semi-hardcoded into the
script by referencing the environment variable R_HOME:

desc "Uses extconf.rb and make to build the extension"
task :build_extension do
Dir.chdir('ext')
system("ruby extconf.rb --with-R-dir=$R_HOME")
system("make")
Dir.chdir('..')
end

Two questions (I'm pretty new with Rake/Hoe so forgive me if these
are obvious):

1. The 'build_extension' task works fine, but seems a little hacky,
how do other people build extensions with Rake/Hoe?

RubyGems looks for both an extconf.rb and an 'extension' rake task.
2. Can I retrospectively add this task as a dependency of the
'test' task, so that when I run my tests I can ensure the library
is freshly built?

I'm not sure how to do this with rake, but we'd accept a patch to Hoe.
 
D

Devin Mullins

Alex said:
2. Can I retrospectively add this task as a dependency of the 'test'
task, so that when I run my tests I can ensure the library is freshly
built?
Yes. I forget exactly, but it's something easy like
Rake::Task['test'].prerequisites << 'build_extension'.

Devin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,145
Messages
2,570,824
Members
47,369
Latest member
FTMZ

Latest Threads

Top