Bug#476284: bullet package name/numbering

2013-01-28 Thread Vincent Fourmond
  Hi !

On Sat, Jan 26, 2013 at 4:05 PM, Markus Koschany  wrote:
> Hi Scott and Vincent,
>
> thank you for your feedback. At the moment i see two alternatives
> (three if a static library is not a taboo)
>
> I'm using CMAKE as build system because it is better supported by
> upstream. I can achieve something similar to the autotools -release
> LDFLAG with
>
> SET_TARGET_PROPERTIES(
> BulletCollision
> PROPERTIES
> VERSION 2
> SOVERSION 2.8.1
> )

  As far as I understand cmake's docs on that (or, rather, the bits I
found on mailing lists),  this makes a SONAME of 2.8.1, which still
means a SONAME bump for every version change.
>
> although you can find the following lines in upstream's CMakelists.txt
> files:
>
> SET_TARGET_PROPERTIES(BulletCollision PROPERTIES VERSION ${BULLET_VERSION})
> SET_TARGET_PROPERTIES(BulletCollision PROPERTIES SOVERSION ${BULLET_VERSION})

  I don't think this makes any difference with what you came around
with. The ideal would be to have SOVERSION be a plain integer that
increases by one every time the ABI is broken. But, this is not a
sustainable approach so long as upstream isn't into it.

> So apparently upstream intends to use the release version as SONAME for
> the library. The background to this is, Bullet is a physics library.
> Every new release the physics can slightly change which can result in
> unexpected ingame behaviour of certain objects thus games are normally
> tuned for a specific bullet release.

  If that is really that bad, it is really painful, as you will not be
able to maintain all the versions of the library that are needed for
every specific depending package in the archive. Making a static
library won't help here, as a simple binNMU would make significant
changes to an otherwise OK package.

> Perhaps this might be different in
> the case of Blender or Panda3D (not yet packaged).
>
> With the above CMAKE construct i can produce libraries like
>
> /usr/lib//libbulletcollision.so -> libbulletcollision.so.0
> /usr/lib//libbulletcollision.so.2 -> libbulletcollision.so.2.8.1
>
> but i have to patch all CMakelists.txt files. (I don't know if there is an
> easier solution within debian/rules.)
>
> So in theory it is possible to create a sane versioning scheme but this
> is completely unsupported by upstream and will most likely result in
> broken games because we cannot assess what effects a new version of
> Bullet will have on ingame physics.
>
> As Vincent has already said, the Release Team won't like the thought to
> make a transition every time a new Bullet version is released. But is
> this really so bad? I mean, there are only a few packages which would
> depend on Bullet like Blender, perhaps Supertuxkart and probably
> FreeOrion.

  For the time being, I suggest you stick to upstream way of doing
things regarding SONAME, and that when you're fed up bothering the
release team for transitions, you'll have the energy and the
background necessary to talk upstream into making something more
stable ;-)...

  I would not recommend making it a static library. Linking with
static libraries has many drawbacks (in terms of security) and should
be avoided as much as possible.

> So if i understand the choices correctly, only bumping the SONAME is a
> sane solution.
>
> Provided the aforementioned assumption is true, is there really a difference
> between
>
> libbulletcollision-2.81 -> libbulletcollision-2.81.so.0.0.0
>
> libbulletcollision2.81 -> libbulletcollision.so.2.81
e
>
> ? In the end the name of the package has to change, correct?

  I'm not sure I see what you mean here. I'm not sure you can have
such thing as a library named libbulletcollision.so.2.81, but my
knowledge of ld.so and friends clearly has its limits ;-).

  Hope all this helps,

  Cheers,

  Vincent


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Bug#476284: bullet package name/numbering

2013-01-26 Thread Scott Howard
On Sat, Jan 26, 2013 at 10:05 AM, Markus Koschany  wrote:
> Hi Scott and Vincent,
>
> thank you for your feedback. At the moment i see two alternatives
> (three if a static library is not a taboo)

Static is not taboo and can be included in -dev packages. Depending
maintainers, however, are strongly encouraged against using your
static package since it increases the burden of security and
maintenance. I think that you really should include .so to be useful
though.


> I'm using CMAKE as build system because it is better supported by
> upstream. I can achieve something similar to the autotools -release
> LDFLAG with
>
> SET_TARGET_PROPERTIES(
> BulletCollision
> PROPERTIES
> VERSION 2
> SOVERSION 2.8.1
> )
>
> although you can find the following lines in upstream's CMakelists.txt
> files:
>
> SET_TARGET_PROPERTIES(BulletCollision PROPERTIES VERSION ${BULLET_VERSION})
> SET_TARGET_PROPERTIES(BulletCollision PROPERTIES SOVERSION ${BULLET_VERSION})

Oh, well that helps - if the soversion is bumped every time then you
might be OK with upstream's build system as is (just enable shared
libraries).

> As Vincent has already said, the Release Team won't like the thought to
> make a transition every time a new Bullet version is released. But is
> this really so bad? I mean, there are only a few packages which would
> depend on Bullet like Blender, perhaps Supertuxkart and probably
> FreeOrion.

FYI: check out OpenMW, they're making good progress and may make it
into Debian in the future.

Although the release team might not like the transitions, I bet they
prefer it to statically linked code throughout the archive. You can
talk with them ahead of time to find ways of responsibly managing
transitions.

> So if i understand the choices correctly, only bumping the SONAME is a
> sane solution.

Yes, if SONAME is bumped with every release, then that is acceptable
and borderline "sane" (sane in that it avoids breakage, however it
also will trigger a large number of transitions). I'm used to projects
that either never set the SONAME or screw up the ABI but not bump
SONAME. This is a different case, where the project is bumping the
SONAME frequently.


> Provided the aforementioned assumption is true, is there really a difference
> between
>
> libbulletcollision-2.81 -> libbulletcollision-2.81.so.0.0.0
>
> libbulletcollision2.81 -> libbulletcollision.so.2.81
>
> ? In the end the name of the package has to change, correct?

Yes - both would be ok (although the first case might not have the
0.0.0, it would just be libbulletcollision-2.81.so or the package name
would have to be libbulletcollision-2.81-0). That's all I wanted, was
to make sure the package name changes.

To get really confused, see the SDL packages
libsdl1.2debian0 -> libSDL-1.2.so.0.11.4  (Lintian says should be libsdl-1.2-0)
libsdl-1.3-0  -> libSDL-1.3.so.0.0.0
libsdl2-2.0-0 -> libSDL2-2.0.so.0.0.0

> I will also talk to the Multimedia Team who maintains Blender at the
> moment, perhaps they know best what kind of library they need and which
> approach is successful in the end.

Yes, please talk with those that would build with it - their opinions
count a lot
Cheers,
Scott


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org



Bug#476284: bullet package name/numbering

2013-01-26 Thread Markus Koschany
On Thu, 17. Jan 16:44 Scott Howard  wrote:
> If your library belongs to a package that doesn't believe in sane
> SONAME version numbering, but instead releases based on version
> numbers that have nothing to do with binary compatibility, it is
> sometimes best to use the -release LDFLAG:

Hi Scott and Vincent, 

thank you for your feedback. At the moment i see two alternatives
(three if a static library is not a taboo)

I'm using CMAKE as build system because it is better supported by
upstream. I can achieve something similar to the autotools -release
LDFLAG with

SET_TARGET_PROPERTIES(
BulletCollision
PROPERTIES
VERSION 2
SOVERSION 2.8.1
)

although you can find the following lines in upstream's CMakelists.txt
files:

SET_TARGET_PROPERTIES(BulletCollision PROPERTIES VERSION ${BULLET_VERSION})
SET_TARGET_PROPERTIES(BulletCollision PROPERTIES SOVERSION ${BULLET_VERSION})

So apparently upstream intends to use the release version as SONAME for
the library. The background to this is, Bullet is a physics library.
Every new release the physics can slightly change which can result in
unexpected ingame behaviour of certain objects thus games are normally
tuned for a specific bullet release. Perhaps this might be different in
the case of Blender or Panda3D (not yet packaged).

With the above CMAKE construct i can produce libraries like

/usr/lib//libbulletcollision.so -> libbulletcollision.so.0
/usr/lib//libbulletcollision.so.2 -> libbulletcollision.so.2.8.1

but i have to patch all CMakelists.txt files. (I don't know if there is an
easier solution within debian/rules.)

So in theory it is possible to create a sane versioning scheme but this
is completely unsupported by upstream and will most likely result in
broken games because we cannot assess what effects a new version of
Bullet will have on ingame physics. 

As Vincent has already said, the Release Team won't like the thought to
make a transition every time a new Bullet version is released. But is
this really so bad? I mean, there are only a few packages which would
depend on Bullet like Blender, perhaps Supertuxkart and probably
FreeOrion. 

So if i understand the choices correctly, only bumping the SONAME is a
sane solution.

Provided the aforementioned assumption is true, is there really a difference
between

libbulletcollision-2.81 -> libbulletcollision-2.81.so.0.0.0

libbulletcollision2.81 -> libbulletcollision.so.2.81

? In the end the name of the package has to change, correct?

I will also talk to the Multimedia Team who maintains Blender at the
moment, perhaps they know best what kind of library they need and which
approach is successful in the end.

Thanks for reading this far

Regards,

Markus



signature.asc
Description: Digital signature


Bug#476284: bullet package name/numbering

2013-01-24 Thread Markus Koschany
On Thu, 17. Jan 16:44 Scott Howard  wrote:
> Hello, late to the party but wanted to put in a comment regarding
> library package naming/versioning. Please ignore this if it has
> already been discussed and i missed it in the thread)

Hi Scott,

you aren't late to the party, it never stops. :) I haven't had the time
in the last days to give you a proper answer. Please bear with me for a
while, i'll definitely come back to you.

Cheers,

Markus


signature.asc
Description: Digital signature


Bug#476284: bullet package name/numbering

2013-01-17 Thread Scott Howard
Hello, late to the party but wanted to put in a comment regarding
library package naming/versioning. Please ignore this if it has
already been discussed and i missed it in the thread)

If your library belongs to a package that doesn't believe in sane
SONAME version numbering, but instead releases based on version
numbers that have nothing to do with binary compatibility, it is
sometimes best to use the -release LDFLAG:


>From the autotools book (but you can adjust it for whatever build
system you want) [1]


%-snip-%
`-release'
On occasion, it is desirable to encode the release number of a
library into its name. By specifying the release number with this
option, libtool will build a library that does this, but will break
binary compatibility for each change of the release number. By
breaking binary compatibility this way, you negate the possibility of
fixing bugs in installed programs by installing an updated shared
library. You should probably be using `-version-info' instead.


libshell_la_LDFLAGS = -release 27

The above fragment might create a library called
`libshell-27.so.0.0.0' for example.

%-snip-%



So, perhaps, libbulletcollision2.81 should really be:

libbulletcollision-2.81.so.0.0.0

and package name "libbulletcollission-2.81" not
"libbulletcollision2.81"  (note the dash and number is in the name,
the version will be appended on to it. This will, however, force
everything to be rebuilt whenever upstream releases a new version.


[1] http://www.sourceware.org/autobook/autobook/autobook_88.html#SEC88


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org