Compiling native extension into Ruby

D

David Craine

--Apple-Mail-1-458716087
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed

I'm trying to compile the BerkeleyDB ruby extension into the ruby
executable for ruby 1.8.2. I've placed the extension directory
underneath the <ruby>/ext directory. When I do configure and make the
build process tries to build the BerkleyDB extension but it fails
because it can't find the Berkeley libraries. Normally when building
this extension you have to specifiy the --with-db-dir=<db dir>
parameter when running the extconf.rb file. But I cannot figure out
how to pass this same information into the configure/make process for
ruby. Anyone have any ideas regarding this?

Dave Craine
--Apple-Mail-1-458716087--
 
T

ts

D> ruby. Anyone have any ideas regarding this?

you don't need to put it into ruby-1.8.2/ext

* Install normally ruby

* extract bdb-0.5.4 *outside* the ruby directory

* then run

ruby extconf.rb --with-db-dir=...
make
make install


Guy Decoux
 
D

David Craine

--Apple-Mail-2-459741324
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed

RIght...I've got that part. But what I'm trying to do is compile and
statically link the extension into the ruby executable itself. I've
created an entry in the <ruby>/ext/Setup file for bdb so that it will
try and build it when Ruby builds. When I try to make ruby it will
actually try and compile the bdb extension, but without passing in the
--with-db-dir parameter. I need to know how to pass this parameter
through to the extconf.rb file for the bdb extension when running the
make file for ruby.

Dave

D> ruby. Anyone have any ideas regarding this?

you don't need to put it into ruby-1.8.2/ext

* Install normally ruby

* extract bdb-0.5.4 *outside* the ruby directory

* then run

ruby extconf.rb --with-db-dir=...
make
make install


Guy Decoux

--Apple-Mail-2-459741324--
 
Y

YANAGAWA Kazuhisa

In Message-Id: <[email protected]>
David Craine said:
actually try and compile the bdb extension, but without passing in the
--with-db-dir parameter. I need to know how to pass this parameter
through to the extconf.rb file for the bdb extension when running the
make file for ruby.

Then give the option to configure. Ruby's configure passes unknown
options to extmk.rb, which then use that options to make extension
libraries.
 
T

ts

D> RIght...I've got that part. But what I'm trying to do is compile and
D> statically link the extension into the ruby executable itself. I've
D> created an entry in the <ruby>/ext/Setup file for bdb so that it will
D> try and build it when Ruby builds. When I try to make ruby it will
D> actually try and compile the bdb extension, but without passing in the
D> --with-db-dir parameter. I need to know how to pass this parameter
D> through to the extconf.rb file for the bdb extension when running the
D> make file for ruby.

There is a bug in extconf.rb for bdb, not really a surprise for me :)

Try it with

uln% cd ext
uln%

uln% tar zxf ~/ruby/perso/db/bdb-0.5.4.tar.gz
uln%

uln% rm -r bdb-0.5.4/extconf.rb bdb-0.5.4/bdbxml*
uln%

uln% cd ..
uln%

uln% tail -1 ext/Setup
bdb-0.5.4/src
uln%

uln% ./configure --prefix=$HOME/local/r182 --with-db-dir=$HOME/local/db4.3.21 > /dev/null
uln%

uln% make

[...]

compiling bdb-0.5.4/src
make[1]: Entering directory `/opt/ts/ruby/tmp/ruby-1.8.2/ext/bdb-0.5.4/src'
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c bdb.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c env.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c log.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c transaction.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c cursor.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c common.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c lock.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c delegator.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c sequence.c
gcc -g -O2 -I. -I../../.. -I../../../. -I../../.././ext/bdb-0.5.4/src -I/opt/ts/local/db4.3.21/include -c recnum.c
ar cru bdb.a bdb.o env.o log.o transaction.o cursor.o common.o lock.o delegator.o sequence.o recnum.o
make[1]: Leaving directory `/opt/ts/ruby/tmp/ruby-1.8.2/ext/bdb-0.5.4/src'

[...]

make[1]: Entering directory `/opt/ts/ruby/tmp/ruby-1.8.2'
gcc -g -O2 -I. -I. -o ext/extinit.o -c ext/extinit.c
gcc -g -O2 -rdynamic -Wl,-export-dynamic -L. -L'/opt/ts/local/db4.3.21/lib' -Wl,-R'/opt/ts/local/db4.3.21/lib' main.o ext/extinit.o ext/bdb-0.5.4/src/bdb.a -lruby-static -ldl -lcrypt -lm -ldb-4.3 -o ruby
make[1]: Leaving directory `/opt/ts/ruby/tmp/ruby-1.8.2'
uln%

uln% ./ruby -e 'p BDB::VERSION'
"Sleepycat Software: Berkeley DB 4.3.21: (November 8, 2004)"
uln%



Guy Decoux
 

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
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top