Fix loading of the ICU dynamic libraries on Windows.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Thu, 22 Mar 2012 14:01:50 +0000 (15:01 +0100)
committerQt by Nokia <qt-info@nokia.com>
Sat, 24 Mar 2012 14:10:00 +0000 (15:10 +0100)
- Account for differing library name on Windows.
- Improve error messages.

Acked-by: John Layt <jlayt@kde.org>
Change-Id: Ib567f8c79ab4b5655cdb2fe050f91013e9305263
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Denis Dzyubenko <denis.dzyubenko@nokia.com>
src/corelib/tools/qlocale_icu.cpp

index ee2e5f4..b3b8836 100644 (file)
@@ -81,9 +81,19 @@ bool qt_initIcu(const QString &localeString)
     if (status == NotLoaded) {
 
         // resolve libicui18n
-        QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT));
+        const QString version = QString::fromLatin1(U_ICU_VERSION_SHORT);
+#ifdef Q_OS_WIN
+        // QLibrary on Windows does not use the version number, the libraries
+        // are named "icuin<version>.dll", though.
+        QString libName = QStringLiteral("icuin") + version;
+#else
+        QString libName = QStringLiteral("icui18n");
+#endif
+        QLibrary lib(libName, version);
         if (!lib.load()) {
-            qWarning() << "Unable to load library icui18n" << lib.errorString();
+            qWarning("Unable to load library '%s' version %s: %s",
+                     qPrintable(libName), qPrintable(version),
+                     qPrintable(lib.errorString()));
             status = ErrorLoading;
             return false;
         }
@@ -104,15 +114,22 @@ bool qt_initIcu(const QString &localeString)
             ptr_ucol_close = 0;
             ptr_ucol_strcoll = 0;
 
-            qWarning("Unable to find symbols in icui18n");
+            qWarning("Unable to find symbols in '%s'.", qPrintable(libName));
             status = ErrorLoading;
             return false;
         }
 
         // resolve libicuuc
-        QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT));
+#ifdef Q_OS_WIN
+        libName = QStringLiteral("icuuc") + version;
+#else
+        libName = QStringLiteral("icuuc");
+#endif
+        QLibrary ucLib(libName, version);
         if (!ucLib.load()) {
-            qWarning() << "Unable to load library icuuc" << ucLib.errorString();
+            qWarning("Unable to load library '%s' version %s: %s",
+                     qPrintable(libName), qPrintable(version),
+                     qPrintable(ucLib.errorString()));
             status = ErrorLoading;
             return false;
         }
@@ -129,7 +146,7 @@ bool qt_initIcu(const QString &localeString)
             ptr_u_strToUpper = 0;
             ptr_u_strToLower = 0;
 
-            qWarning("Unable to find symbols in icuuc");
+            qWarning("Unable to find symbols in '%s'", qPrintable(libName));
             status = ErrorLoading;
             return false;
         }