From 21968aed886e45c0514a2b770bc678c07a204d89 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Thu, 18 Apr 2019 18:55:25 +0200 Subject: Fix tests on non-latin systems Qt Creator uses non-latin letters in path to the build directory in case of ru_RU.UTF-8 $LANG on Linux. Now QBS does handle that correctly. Change-Id: Ifc727b120a5f0ee60972c5e3ed24067426db8df2 Reviewed-by: Christian Kandeler --- share/qbs/modules/cpp/GenericGCC.qbs | 3 +++ src/lib/corelib/jsextensions/utilitiesextension.cpp | 4 ++-- tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs | 2 +- tests/auto/blackbox/tst_blackbox.cpp | 5 ++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/share/qbs/modules/cpp/GenericGCC.qbs b/share/qbs/modules/cpp/GenericGCC.qbs index b4e755a3e..f9537884e 100644 --- a/share/qbs/modules/cpp/GenericGCC.qbs +++ b/share/qbs/modules/cpp/GenericGCC.qbs @@ -729,6 +729,9 @@ CppModule { match = regexp.exec(linkerScript.readLine()); if(match) { var additionalPath = match[1]; + // path can be quoted to use non-latin letters, remove quotes if present + if (additionalPath.startsWith("\"") && additionalPath.endsWith("\"")) + additionalPath = additionalPath.slice(1, additionalPath.length - 1); retval.push(additionalPath); } } diff --git a/src/lib/corelib/jsextensions/utilitiesextension.cpp b/src/lib/corelib/jsextensions/utilitiesextension.cpp index 62778665c..b425bb4a2 100644 --- a/src/lib/corelib/jsextensions/utilitiesextension.cpp +++ b/src/lib/corelib/jsextensions/utilitiesextension.cpp @@ -236,7 +236,7 @@ static inline QString escapedString(const Char *begin, int length, bool isUnicod // Surrogate characters are category Cs (Other_Surrogate), so isPrintable = false for them int runLength = 0; while (p + runLength != end && - isPrintable(p[runLength]) && p[runLength] != '\\' && p[runLength] != '"') + QChar::isPrint(p[runLength]) && p[runLength] != '\\' && p[runLength] != '"') ++runLength; if (runLength) { out += QString(reinterpret_cast(p), runLength); @@ -288,7 +288,7 @@ static inline QString escapedString(const Char *begin, int length, bool isUnicod if ((p + 1) != end && QChar::isLowSurrogate(p[1])) { // properly-paired surrogates uint ucs4 = QChar::surrogateToUcs4(*p, p[1]); - if (isPrintable(ucs4)) { + if (QChar::isPrint(ucs4)) { buf[0] = *p; buf[1] = p[1]; buflen = 2; diff --git a/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs b/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs index 9dd7bf5b2..0b4de0ab9 100644 --- a/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs +++ b/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs @@ -44,7 +44,7 @@ DynamicLibrary { cmd.sourceCode = function() { var file = new TextFile(buildPath + "/linkerscript_with_includes", TextFile.WriteOnly); - file.write("SEARCH_DIR(" + sourcePath + "/scripts)\n" + + file.write("SEARCH_DIR(\"" + sourcePath + "/scripts\")\n" + "INCLUDE linkerscript_to_include\n" + "INCLUDE linkerscript_in_directory\n"); file.close(); diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 219a473e0..399a49b21 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -2537,6 +2537,9 @@ void TestBlackbox::smartRelinking_data() static QString soName(const QString &readElfPath, const QString &libFilePath) { QProcess readElf; + auto env = QProcessEnvironment::systemEnvironment(); + env.insert(QStringLiteral("LC_ALL"), QStringLiteral("C")); // force readelf to use US encoding + readElf.setProcessEnvironment(env); readElf.start(readElfPath, QStringList() << "-a" << libFilePath); if (!readElf.waitForStarted() || !readElf.waitForFinished() || readElf.exitCode() != 0) { qDebug() << readElf.errorString() << readElf.readAllStandardError(); @@ -2936,7 +2939,7 @@ void TestBlackbox::probeChangeTracking() void TestBlackbox::probeProperties() { QDir::setCurrent(testDataDir + "/probeProperties"); - const QByteArray dir = QDir::cleanPath(testDataDir).toLatin1() + "/probeProperties"; + const QByteArray dir = QDir::cleanPath(testDataDir).toLocal8Bit() + "/probeProperties"; QCOMPARE(runQbs(), 0); QVERIFY2(m_qbsStdout.contains("probe1.fileName=bin/tool"), m_qbsStdout.constData()); QVERIFY2(m_qbsStdout.contains("probe1.path=" + dir), m_qbsStdout.constData()); -- cgit v1.2.3