Subject: pkg/26633: package ABI is often broken on NetBSD due to libtool porting problem
To: None <gnats-bugs@gnats.netbsd.org>
From: Noriyuki Soda <soda@sra.co.jp>
List: pkgsrc-bugs
Date: 08/13/2004 08:50:17
>Number: 26633
>Category: pkg
>Synopsis: package ABI is often broken on NetBSD due to libtool porting problem
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Aug 12 23:51:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator: Noriyuki Soda
>Release: NetBSD 1.6.2
>Organization:
Software Research Associates, Inc.
>Environment:
System: NetBSD boaz 1.6.2 NetBSD 1.6.2 (GENERIC_LAPTOP) #0: Tue Feb 10 22:02:37 UTC 2004 autobuild@tgm.netbsd.org:/autobuild/netbsd-1-6-PATCH002/i386/OBJ/autobuild/netbsd-1-6-PATCH002/src/sys/arch/i386/compile/GENERIC_LAPTOP i386
Architecture: i386
Machine: i386
>Description:
NetBSD port of libtool doesn't properly implement libtool versioning
concept.
Every time a function is added to a third party library,
major version of the library is needlessly incremented on NetBSD,
thus, the library ABI is unnecessarily broken on NetBSD.
In contrast, this problem doesn't happen on Linux, IRIX, OSF
and Windows, because libtool is properly ported to those
platforms, thus adding a new function doesn't change major version
unless there is real ABI change.
See "6.2 Libtool's versioning system"
http://www.gnu.org/software/libtool/manual.html#SEC34
or "Versioning" section of libtool info page for the detail
of the libtool versioning concept.
As you see, library major version must be calculated as
$CURRENT - $AGE with this concept, but actually major version
is just equal to $CURRENT on NetBSD.
>How-To-Repeat:
>Fix:
Change the following (current) way to calculate shared object
name in libtool from:
major=".$current"
versuffix=".$current.$revision"
to either this way:
major=".`expr $curent - $age`"
versuffix="`expr $age '*' 1000 + $revision`"
or the following way:
major=.`expr $current - $age`
versuffix="$major.$age.$revision"
Unfortunately, simply doing so breaks nearly all existing
binary packages, so, changing LOCALBASE from /usr/pkg to
something else is needed too. ;-/
Or, is there any other way to solve this problem?
>Release-Note:
>Audit-Trail:
>Unformatted: