[Ipe-discuss] Re: Building Ipe: shared libs without version

Otfried Cheong otfried at ipe.airpost.net
Mon Dec 7 15:45:03 CET 2009


Steve M. Robbins wrote:
>> The ipelet example is not valid, as ipelets need to match the
>> current Ipe version anyway - they have to be recompiled for every
>> new release of Ipe.
> 
> I didn't realize that.  How is that requirement enforced; e.g. are
> there runtime checks?

Yes - after loading the ipelet, Ipe first checks that it matches the Ipe 
version, and does not use it otherwise.

> I believe Qt does this to support simultaneous install of Qt 3 and Qt
> 4 *development* environments.  You can support this if you wish, but
> Debian has no such requirement for Ipe.

I was actually wrong about this - I realized that on my Ubuntu system, 
the libraries are simply called libQtCore.so and libQtGui.so (without 
the "4").  I probably remembered seeing it as QtCore4.dll under Windows.

> The Debian requirement concerns not breaking libipe-linked code when
> upgrading the libipe *runtime* package.  We name the runtime package
> after the soname in order that different runtime ABIs are
> simultaneously co-installable; e.g. libipe.so.1 in package name
> libipe1 and libipe.so.7.0.9 in package name libipe7.0.9.  There is
> some overhead introduced with each new package name so I'd be grateful
> if you could reconsider ABI compatibility across Ipe versions.
> However, if you really cannot guarantee ABI compatibility across Ipe
> 7.x or 7.0.x, we can live with it.

Maintaining binary compatibility means to very carefully think about 
every change you make to the library.  Most iterations between 7.0.0 and 
7.0.10 would have broken this.   One way around to ensure a stable ABI 
is to hide a lot of information in private structures that are only 
visible as pointers from the public structures - Qt does that - but 
that's overly complicated for small structures.  Basically I think the 
overhead of managing binary compatibility is beyond the possibilities of 
a one-person project.

So it will have to be libipe.so.7.0.9.

I'll implement this in 7.0.10, and hope to release that shortly.

Cheers,
   Otfried





More information about the Ipe-discuss mailing list