[Bug 53354] New: Wine should provide icu.dll

WineHQ Bugzilla wine-bugs at winehq.org
Fri Jul 15 08:25:27 CDT 2022


https://bugs.winehq.org/show_bug.cgi?id=53354

            Bug ID: 53354
           Summary: Wine should provide icu.dll
           Product: Wine
           Version: unspecified
          Hardware: x86-64
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: -unknown
          Assignee: wine-bugs at winehq.org
          Reporter: osmanx at problemloesungsmaschine.de
      Distribution: ---

Created attachment 72742
  --> https://bugs.winehq.org/attachment.cgi?id=72742
tzdb.exe

Windows since at least version Windows 10 19H1 ships a icu.dll in the system
directory. The VS2022 (and I think also VS2019) C++ standard library in C++20
mode uses this DLL to implement the timezone database as specified by the C++
standard. The standard library loads this DLL dynamically with LoadLibraryExW
(see
<https://github.com/microsoft/STL/blob/ef62d3fa0b8e4e2406b9bb74e916e1ca8a1df802/stl/src/tzdb.cpp#L66>)
and throws a std::system_error (see
<https://github.com/microsoft/STL/blob/ef62d3fa0b8e4e2406b9bb74e916e1ca8a1df802/stl/src/tzdb.cpp#L354>
and
<https://github.com/microsoft/STL/blob/ef62d3fa0b8e4e2406b9bb74e916e1ca8a1df802/stl/src/tzdb.cpp#L455>)
when it cannot load it. In order to provide compatibility with modern Windows
versions, IMHO Wine should thus ship a compatible icu.dll. A similar issue also
exists for older Windows versions even on the Microsoft side (see
<https://github.com/microsoft/STL/issues/1911>).

This issue arose since I recently modernized timezone handling in OpenMPT by
using C++20 chrono. For now, I have worked around the problem in OpenMPT. See
<https://bugs.openmpt.org/view.php?id=1618> and
<https://source.openmpt.org/browse/openmpt?op=comp&compare[]=/trunk/OpenMPT/@17667&compare[]=/trunk/OpenMPT/@17668>.

Simple test case:
```
// cl /std:c++20 /permissive- /EHsc /O2 /W4 tzdb.cpp

#include <chrono>
#include <iostream>
#include <stdexcept>

#include <windows.h>

int main() {
    try {
        std::chrono::get_tzdb_list();
    } catch (const std::exception & e) {
        std::cerr << "FAIL: " << e.what() << std::endl;
        return 1;
    }
    std::cout << "OK" << std::endl;
    return 0;
}
```

tzdb.exe attached.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list