[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

building an extension gem and including a library source

Emmanuel Oga

9/7/2007 5:56:00 AM

I'm building an extension gem for http://libharu.source... My
intent is to help the spread of the library by uploading it to rubyforge
(it is already uploaded and working for the windows version, check: gem
install hpdf on win)

In LINUX, this library and the ruby extension is very easy to setup in
the traditional way. Just untar and run:

/configure --cflags=-fPIC
make

This makes libharu.so, wich will be needed by the ruby extension. Then

ruby extconf.rb
make
cp hpdf.so /var/lib/gems/hpdf/lib # << Path must be correct on your
system

That's all. The problem comes when i try to package the gem with
rubygems. I have no problems with the gem specification, but for the
extconf.rb i made a horrible hack that, tough works, is very, very ugly,
and dependes on "sh" and "sudo" to work properly, wich i don't know if
will always be available:

--------------------------------------------------------------------------
# First build the library. Horrible hack!
source_dir= File.join(File.dirname(__FILE__), './libharu')
system("cd #{source_dir}; sudo sh ./configure --cflags=-fPIC; make")

# From now on is ok
require 'mkmf'
$CPPFLAGS = $CPPFLAGS + " -I./libharu/include"
$LDFLAGS = $LDFLAGS + " -L./libharu"
$LIBS = $LIBS + " -lhpdf -lpng -lz"
create_makefile 'hpdf'
--------------------------------------------------------------------------

How can i change the gem spec or the extconf.rb file to avoid the use of
sh and sudo? I tought of moving all the .c and .h files to the same dir,
but i don't know if i will need special flags to compile the whole thing
!
--
Posted via http://www.ruby-....

1 Answer

Tom M

9/7/2007 1:39:00 PM

0

Are you using the Gem::Specifications#extesions method? in your
gemspec? This builds the extension when you install the gem
automatically. You just say

spec.extensions = ["ext/[whatever]/extconf.rb"]

in your gemspec