[Development] Proposed solution to the ICU problem

Thiago Macieira thiago.macieira at intel.com
Tue Jul 31 14:00:10 CEST 2012


Quick discussion on IRC happened. This is a summary of the discussion and 
proposal for the SDK.

Situation:

The ICU libraries *do* offer a stable C API, which they say they will maintain 
and keep compatible. However, the library soname changes on every version and 
most distributors enable symbol renaming. That means we cannot depend on the 
stable API.

What's more, ICU may or may not be present on some systems.

On WIndows, it's not present. Therefore, we need to supply our own ICU anyway. 
Any Windows programs will need to ship it and our deployment instructions 
should be adapted to match.

On iOS, it is present but dlopen is not available to applications. Therefore, 
we must link to it anyway (note: I don't know if App Store rules permit that). 
If the ICU versions do change on different iOS versions, then application 
developers will need to create multiple versions of their applications.

For Linux distribution packages, the version of ICU is tightly controlled by 
the distributors. Therefore, linking to it is no problem and should be the 
default. This is also the default for people downloading and building from 
sources.

The problem remains for the Linux and Mac SDKs and for Android. I don't know 
the situation on QNX, but it is either this case or the one above of 
distribution packages.

For the Linux and Mac SDKs, we *can* get away with shipping our own copy of 
ICU, just like it will be done for Windows. For Android, it would be 
preferable if we could dlopen the library. If we have the code to dlopen, 
however, then we could also use it for Linux and Mac SDKs. Unfortunately, due 
to the symbol renaming, soname renaming and the QtWebKit dependency, this 
solution is too much work for 5.0.

Proposal:

We propose then that for the 5.0 SDK packages, we ship our own copy of ICU, in 
all cases. It's already done for Windows. I'd also recommend going further and 
using ICU's own renaming system to insert a "q" in the function names and 
soname so they don't conflict with the system.

As a 5.1 task, we propose investigating the searching+dlopen solution.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
     Intel Sweden AB - Registration Number: 556189-6027
     Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.qt-project.org/pipermail/development/attachments/20120731/40236362/attachment.sig>


More information about the Development mailing list