This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Announce: guile-dblib-0.9 available (beta software)



I have put a spiffy version of guile-dblib out on
http://idt.net/~mcmanus that uses autoconf and libtool.  If you're
interested, please take a look and let me know if it looks, or better
yet, works OK.

There is one remaining problem I'm having with libtool, that I haven't
been able to resolve.  If no one on this list is able to help me with it,
I'll send a message to libtool-bug, asking for help, in a day or two.

Thanks,
-russ


Here is the README file from the distribution:


This directory of code is used to build software to enable access to
Sybase through the dblib library.  This is still beta software,
because I haven't figured out how to portably build shared libraries
with libtool yet.  More about this later.  

This work is copyright protected under the GNU General Public License.
Please see the file COPYING which will tell you in more detail about
the copyright restrictions on this work.

I've added support for two to non-inuitive configure features.  The
first of these is called 'dblib', and you can use it to specify where
your dblib installation is at.  The second of these is called simply
'guile', and it is used similarly, to specify where you have guile
installed.  If you've got guile installed in /usr/local, and
/usr/local is in your path, then you shouldn't need this to build.

To build in my installation, I configured like this:

./configure --enable-guile=/opt/guile --enable-dblib=/opt/sybase

As I hinted at above, I have not been able to figure out how to get
libtool to build shared libraries the way that I expect on my Solaris
machine.  I am trying to produce a .so file that records that fact that
it is in turn dependent on libsybdb.so.  When this is done, dlopen() on
the .so file should also cause libsybdb.so to be loaded.

The command that I'm using to build the .so is this (lines wrapped with
backslash):

    $(LIBTOOL) --mode=link $(CC) -export-dynamic -o $@ \
      $(srcdir)/dblib_glue.lo \
      -rpath $(GUILE_DIR)/share/guile/site/database/sybase \
      $(LDFLAGS) $(LIBS)

which expands out to:

    /home/mcmanr/local/bin/libtool --mode=link gcc -export-dynamic \
      -o libdblib.la ./dblib_glue.lo \
      -rpath /opt/guile/share/guile/site/database/sybase \
      -L/opt/guile/lib -L/opt/sybase/lib  -lguile -lqthreads -lsybdb \
      -lsocket -lnsl -lc -lm 

>From this, libtool generates the following sequence of commands:

    rm -f .libs/libdblib.la .libs/libdblib.* .libs/libdblib.*
    /usr/ccs/bin/ld -G -h libdblib.so.0 -o .libs/libdblib.so.0.0.0 ./dblib_glue.lo
    (cd .libs && ln -s libdblib.so.0.0.0 libdblib.so.0)
    (cd .libs && ln -s libdblib.so.0.0.0 libdblib.so)
    ar cru .libs/libdblib.a ./dblib_glue.o
    ranlib .libs/libdblib.a
    creating libdblib.la
    (cd .libs && ln -s ../libdblib.la libdblib.la)

I'm obviously missing something about how to instruct libtool to do
what I think should be done.  To concretely illustrate what I think
should be done, I was able to build the shared library with the following
command, that did what I thought was right:

    /usr/ccs/bin/ld -G -h libdblib.so.0 -o .libs/libdblib.so.0.0.0 \
      ./dblib_glue.lo -L/opt/sybase/lib -R/opt/sybase/lib -lsybdb


I don't know how to get libtool to do this, as soon as I figure it
out, I'll be in business.  Or maybe my whole understanding of shared
libraries is cock-eyed, and I need an attitude adjustment.

-russ 

(russell.mcmanus@gs.com)

--
My mailer limits .sigs files to 2 lines. But ingeniously I bypassed this by