Subject: Re: Libtool on NetBSD/ELF
To: Nick Hudson <nick@nthcliff.demon.co.uk>
From: Steinar Hamre <steinarh@stud.fim.ntnu.no>
List: tech-pkg
Date: 10/02/2000 16:42:36
Nick Hudson <nick@nthcliff.demon.co.uk> writes:

> It looks as though you are using the 1.3.5 distribution which does have
> problems for NetBSD.

That's exactly why I've fixed it locally. But the -module-bug has
existed since 1.3.2 at least, probably always. (One can argue if it's
a bug or not, libtool inludes a libary with dlopen() for ar-archives
of PIC-objects. However, most programs linking to theese modules will
not use this libary, but the native dlopen()...)

> Steinar Hamre wrote:
> > Ok, everyone hates libtool for always beeing so wrong. But we still
> > have to fix it. libtool -module on netbsd/elf creates an 'ar'-archive,
> > and *wow* that does not work with dlopen(). So I've tried fixing
> > libtool on netbsd/elf a little bit. It would be very nice if somebody
> > told me if I'm doing anything awfully wrong before i send this to the
> > libtool maintainers.
> > 
> > First,echo __ELF__ | $CC -E - | grep __ELF__is true if the the
> > toolcain is *not* elf. So the first test was inversed.
> 
> This is fixed in the pkgsrc libtool.

Good. I couldn't really imagine that passing unnotised. (I am *not*
using pkgsrc, I'm compiling for a large number of different OS/arches
using the STORE system. I posted here because I figured this is where
I might find other people interested in libtool & NetBSD.)

> This is in the libtool cvs repository along with hardcode_into_libs=yes
[...]
> This is in pkgsrc and cvs libtool.

Very good. I was worried because very little seemed to have happened
since 1.3.2.

> > The (seriosly misnamed) version_type `linux' seems to be the most
> > sensible one. It's used by most elf and ecoff platforms. The only real
> > alternative is `freebsd-elf'. The difference is: `linux' uses 3-digit
> > versioning libfoo.so.$major.$age.$minor (major=$current-$age) whereas
> > `freebsd-elf' uses 1-digit versioning libfoo.so.$current
> 
> I've not look at this one...

I think you should. Currenly `sunos' is used for NetBSD/aout and elf.
version_type=sunos is *not* meant for ELF, and does not set any soname
at all! (you do not get *any* versioning).

version_type=linux generates libaries in the same manner as the NetBSD
base system, so I suppose you should go for that.
version_type=freebsd_elf is a bit weird.

> > $ libtool --mode=link gcc -version-info 6:1:4 [...]   will create
> > libfoo.so.2.4.1 (soname libfoo.so.2)  using `version_type=linux'
> > libfoo.so.6     (soname libfoo.so.6)  using `version_type=freebsd-elf'
> 
> I presume the 2 in a typo?!?

No it's not. That is why I included this example. (major=$current-$age)
The $age is supposed to show how many versions this release is backwards
compatible. However, $age is very seldom used (probably because it is not
very well understood.)

	Steinar