Subject: lossage guile-gtk, guile, pthreads
To: None <tech-pkg@netbsd.org>
From: Greg Troxel <gdt@ir.bbn.com>
List: tech-pkg
Date: 05/12/2004 17:11:56
Summary: guile-gtk links against pthreads, guile does not, boom - but
how to fix in pkgsrc cleanly?


guile-gtk has not released a tarball in too long, so I updated pkgsrc
locally to use a tarball I made from guile-gtk cvs.
The package builds/installs fine.

On running it, guile blows up on doing

(use-modules (gtk gtk))

I think I have narrowed this down to guile not being linked with
pthread but guile-gtk is (because gtk is):

/usr/pkg/bin/guile:
         -lcrypt.0 => /usr/lib/libcrypt.so.0
         -lm.0 => /usr/lib/libm387.so.0
         -lm.0 => /usr/lib/libm.so.0
         -lguile-ltdl.1 => /usr/pkg/lib/libguile-ltdl.so.1
         -lguile.15 => /usr/pkg/lib/libguile.so.15
         -lc.12 => /usr/lib/libc.so.12

/usr/pkg/lib/libguilegtk-1.2.so.0.0:
         -lgmodule.13 => /usr/pkg/lib/libgmodule.so.13
         -lglib.13 => /usr/pkg/lib/libglib.so.13
         -lX11.6 => /usr/X11R6/lib/libX11.so.6
         -lXext.6 => /usr/X11R6/lib/libXext.so.6
         -lXi.6 => /usr/X11R6/lib/libXi.so.6
         -lm.0 => /usr/lib/libm387.so.0
         -lm.0 => /usr/lib/libm.so.0
         -lintl.0 => /usr/lib/libintl.so.0
         -lgtk.12 => /usr/pkg/lib/libgtk.so.12
         -lgdk.12 => /usr/pkg/lib/libgdk.so.12
         -lpthread.0 => /usr/lib/libpthread.so.0
         -lgthread.13 => /usr/pkg/lib/libgthread.so.13


So libc functions being invoked from guile (like 'free'), check for
being threaded, and lose.

I am guessing that it is just plain wrong to dynlink in a library
linked with pthreads into a program that was not linked with pthreads.

So, should the guile pkg link with pthreads (even gthough guile
expects to be called from only one thread, this is ok guile-wise).  Or
should we have guile-pth additionally?



(gdb) run
Starting program: /usr/pkg/bin/guile 
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
guile> (use-modules (gtk gtk))
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...
Program received signal SIGABRT, Aborted.
0x4812996b in kill () from /usr/lib/libc.so.12
(gdb) bt
#0  0x4812996b in kill () from /usr/lib/libc.so.12
#1  0x4812ba2f in __libc_mutex_unlock () from /usr/lib/libc.so.12
#2  0x4819c0db in free () from /usr/lib/libc.so.12
#3  0x480e8752 in lt_dlopenext () from /usr/pkg/lib/libguile-ltdl.so.1



-- 
        Greg Troxel <gdt@ir.bbn.com>