pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/26633: package ABI is often broken on NetBSD due to libtool porting problem



>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@localhost:/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:



Home | Main Index | Thread Index | Old Index