Re: Discussion about bug #615504

2010-08-17 Thread Paul Smith
On Tue, 2010-08-17 at 11:56 -0300, Leandro de Oliveira wrote:
> I thought not having a versionless symlink was a bug, but it seems to
> be an explicit decision, if that is the case, then java apps using
> bluetooth will always need the user to install libbluetooth-dev
> instead of being able to work with the latest version. Since backwards
> compatibility should be a given, I don't see why there coudn't be a
> versionless symlink.

But, backward compatibility is NOT a given; that's why we have versioned
libraries in the first place.

In a POSIX-y system like Linux, shared library versions work like this
typically: the library filename is "libfoo.so.x.y" where "x" is the
major version and "y" (which might have multiple parts) is the minor
version.

The rules are that any changes that do not modify the library ABI can
change only the "y" version but leave the "x" version the same, and
these can be used without recompiling code.

Any changes the modify the library ABI _must_ change the "x" version,
and all applications must link against the new version explicitly.

To support this, the linker (usually) puts a reference to "libfoo.so.x"
in the binary so that's the library that the runtime linker looks for,
and the package will install a symlink "libfoo.so.x" which points to the
currently-installed/newest "libfoo.so.x.y" shared library.

In order for new applications to be compiled, the development package
installs a symlink "libfoo.so" which points to the
currently-installed/newest "libfoo.so.x", or major version.  The
compile-time linker, when it sees "-lfoo" on the link line, will search
for "libfoo.so" and link that, putting (as above) "libfoo.so.x" into the
binary for the runtime linker to find.


Some incorrectly-built applications force the compile-time linker to add
"libfoo.so", only, to the binary: this is wrong because it doesn't
follow the conventions above and the "libfoo.so" won't be available on
systems which do not have developer packages installed (as above).

Note that shared libraries can reference other shared libraries and
typically follow the same rules as above.

You should file a bug against the Bluecove library: it's not being
created properly.


-- 
Ubuntu-devel-discuss mailing list
Ubuntu-devel-discuss@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss


Re: Discussion about bug #615504

2010-08-17 Thread Leandro de Oliveira
Bluecove is a java library and is platform-independent. It uses bluez in linux.
But the instalation of bluez on ubuntu doesn't provide a versionless
symlink that is necessary for bluecove to work without user
intervention. Bluecove links against a versionless library to be able
to use the same build with bluez version 3 and version 4.

I thought not having a versionless symlink was a bug, but it seems to
be an explicit decision, if that is the case, then java apps using
bluetooth will always need the user to install libbluetooth-dev
instead of being able to work with the latest version. Since backwards
compatibility should be a given, I don't see why there coudn't be a
versionless symlink.

2010/8/17 Martin Pitt :
> Hello Leandro,
>
> Leandro de Oliveira [2010-08-16 15:29 -0300]:
>> The main issue is that a symlink named libbluetooth.so is required for
>> bluecove to work without user intervention.
>
> This sounds like a build system bug of bluecove. Library packages
> must not install a versionless libfoo.so symlink. This is allowed for
> -dev packages, since they do not have to be installable in several
> versions in parallel, but that must be the case for the actual
> libraries. Also, linking against a versionless library would be very
> crash prone, since you cannot rely on the library's ABI.
>
> bluecove isn't packaged, it seems to be a third-party app?
>
> Martin
> --
> Martin Pitt                        | http://www.piware.de
> Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)
>

-- 
Ubuntu-devel-discuss mailing list
Ubuntu-devel-discuss@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss


Re: Discussion about bug #615504

2010-08-16 Thread Martin Pitt
Hello Leandro,

Leandro de Oliveira [2010-08-16 15:29 -0300]:
> The main issue is that a symlink named libbluetooth.so is required for
> bluecove to work without user intervention.

This sounds like a build system bug of bluecove. Library packages
must not install a versionless libfoo.so symlink. This is allowed for
-dev packages, since they do not have to be installable in several
versions in parallel, but that must be the case for the actual
libraries. Also, linking against a versionless library would be very
crash prone, since you cannot rely on the library's ABI.

bluecove isn't packaged, it seems to be a third-party app?

Martin
-- 
Martin Pitt| http://www.piware.de
Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)

-- 
Ubuntu-devel-discuss mailing list
Ubuntu-devel-discuss@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss


Discussion about bug #615504

2010-08-16 Thread Leandro de Oliveira
Hi,

I've filed a question that was transformed into a bug was redirected
for discussion in some mailing list. I'm guessing this is the right
one.
Here is a direct link: https://bugs.launchpad.net/ubuntu/+bug/615504

The main issue is that a symlink named libbluetooth.so is required for
bluecove to work without user intervention. Without this, users must
create this link manually or install the libbluetooth-dev package so
their java applications using bluetooth are able to work properly.
Is it ok to have this package installed or this symlink created by
default in future releases of ubuntu?

Thanks

-- 
Ubuntu-devel-discuss mailing list
Ubuntu-devel-discuss@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss