On 10/03/2020 10:34, Dimitry Sibiryakov wrote:
10.03.2020 09:48, Alex Peshkoff via Firebird-devel wrote:
May be for old windows versions - yes, some problems. All the others
upgrade ICU as a part of regular OS upgrade. I.e. if one already has
local ICU extended format is definitely useless overhead.
ICU appeared only in recent builds of Windows 10. Windows 7-8 and
servers don't have it.
Some Linux distros package ICU in a very strange way with names that
Firebird don't know how to use.
The definitive document from Microsoft is here:
https://docs.microsoft.com/en-us/windows/win32/intl/international-components-for-unicode--icu-
It looks like the icu dlls are only available from Version 1709 onwards.
Interestingly, they are called:
icuuc.dll, and
icuin.dll
in true MS fashion, the filenames do not include a version number.
Looking at
https://github.com/fyatao/firebird/blob/master/src/common/unicode_util.cpp
it looks like Firebird will try and load icu files with the version
number in them i.e. using the template
#if defined(WIN_NT)
const char* const inTemplate = "icuin%s.dll";
const char* const ucTemplate = "icuuc%s.dll";
I may have missed it, but I can't see the code that also tries a missing
version number for the dll file name. i.e. it won't try to load the MS
supplied versions.
Firebird 4 Beta 1 was distributed with icuin63.dll and icuuc63.dll and I
would expect the server to always load this version regardless of the
ICU version provided with Windows 10.
On Windows, Firebird should really try and load the MS supplied ICU dlls
first and then only try and load the Firebird distributed ones
afterwards. If my reading of the code is correct then, Firebird will
only ever load the Firebird distributed versions - and this looks like a
bug. I apologise in advance if I mis-read the code.
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel