aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2015-04-23 10:34:36 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2015-04-23 10:24:36 +0000
commit886ab87bdf12468d0d32c2541437cd7174f486d7 (patch)
tree933e134421610e4ef9363ac4d3341ce7ff8d32f3
parent32d4ca135a25ae6b0c350dde3692741b7d862d82 (diff)
Prevent automatic casting from char* to QString.
Reason 1: Internationalization. Reason 2: Performance issues due to inadvertant QString instantiations in hot code paths. Task-number: QBS-780 Change-Id: I37c740dd828e11c5b0000a0dd472a519d032d71c Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r--qbs-resources/imports/QbsProduct.qbs1
-rw-r--r--src/app/qbs-setup-qt/setupqt.cpp8
-rw-r--r--src/app/qbs-setup-toolchains/probe.cpp12
-rw-r--r--src/app/qbs-setup-toolchains/vsenvironmentdetector.cpp3
-rw-r--r--src/lib/corelib/buildgraph/qtmocscanner.cpp3
-rw-r--r--src/lib/corelib/corelib.qbs1
-rw-r--r--src/lib/corelib/language/builtindeclarations.cpp2
-rw-r--r--src/lib/corelib/language/language.cpp4
-rw-r--r--src/lib/corelib/language/projectresolver.cpp2
-rw-r--r--src/lib/corelib/language/scriptengine.cpp2
-rw-r--r--src/lib/corelib/language/tst_language.cpp2
-rw-r--r--src/lib/corelib/language/value.cpp4
-rw-r--r--src/lib/corelib/tools/shellutils.cpp2
-rw-r--r--src/lib/corelib/tools/tst_tools.cpp3
-rw-r--r--src/lib/library.pri1
-rw-r--r--src/lib/qtprofilesetup/qtmoduleinfo.cpp12
-rw-r--r--src/lib/qtprofilesetup/qtprofilesetup.cpp46
17 files changed, 61 insertions, 47 deletions
diff --git a/qbs-resources/imports/QbsProduct.qbs b/qbs-resources/imports/QbsProduct.qbs
index daf2e6efa..80fe5601d 100644
--- a/qbs-resources/imports/QbsProduct.qbs
+++ b/qbs-resources/imports/QbsProduct.qbs
@@ -4,5 +4,6 @@ import QbsFunctions
Product {
Depends { name: "Qt.core" }
property string minimumQtVersion: "5.1.0"
+ cpp.defines: ["QT_NO_CAST_FROM_ASCII"]
condition: QbsFunctions.versionIsAtLeast(Qt.core.version, minimumQtVersion)
}
diff --git a/src/app/qbs-setup-qt/setupqt.cpp b/src/app/qbs-setup-qt/setupqt.cpp
index de2a2e512..19dddd082 100644
--- a/src/app/qbs-setup-qt/setupqt.cpp
+++ b/src/app/qbs-setup-qt/setupqt.cpp
@@ -225,12 +225,12 @@ QtEnvironment SetupQt::fetchEnvironment(const QString &qmakePath)
// Work around QTBUG-28792.
// The value of QMAKESPEC_ORIGINAL is wrong for MinGW packages. Y u h8 me?
const QRegExp rex(QLatin1String("\\binclude\\(([^)]+)/qmake\\.conf\\)"));
- if (rex.indexIn(fileContent) != -1)
+ if (rex.indexIn(QString::fromLocal8Bit(fileContent)) != -1)
qtEnvironment.mkspecPath = QDir::cleanPath(baseDirPath + rex.cap(1));
}
} else {
- qtEnvironment.mkspecPath
- = QFileInfo(qtEnvironment.mkspecBasePath + "/default").symLinkTarget();
+ qtEnvironment.mkspecPath = QFileInfo(qtEnvironment.mkspecBasePath
+ + QLatin1String("/default")).symLinkTarget();
}
qtEnvironment.mkspecName = qtEnvironment.mkspecPath;
int idx = qtEnvironment.mkspecName.lastIndexOf(QLatin1Char('/'));
@@ -260,7 +260,7 @@ QtEnvironment SetupQt::fetchEnvironment(const QString &qmakePath)
static bool isToolchainProfileKey(const QString &key)
{
// The Qt profile setup itself sets cpp.minimum*Version for some systems.
- return key.startsWith(QLatin1String("cpp.")) && !key.startsWith("cpp.minimum");
+ return key.startsWith(QLatin1String("cpp.")) && !key.startsWith(QLatin1String("cpp.minimum"));
}
void SetupQt::saveToQbsSettings(const QString &qtVersionName, const QtEnvironment &qtEnvironment,
diff --git a/src/app/qbs-setup-toolchains/probe.cpp b/src/app/qbs-setup-toolchains/probe.cpp
index 0ae9f6c1f..531bbf0c1 100644
--- a/src/app/qbs-setup-toolchains/probe.cpp
+++ b/src/app/qbs-setup-toolchains/probe.cpp
@@ -124,12 +124,12 @@ static void setupCompilerPathByLanguage(Profile &profile, const QStringList &too
const QString &toolchainInstallPath, const QString &toolchainPrefix)
{
QVariantMap m;
- if (toolchainTypes.contains("clang")) {
- m["c"] = m["objc"] = QLatin1String("clang");
- m["cpp"] = m["objcpp"] = QLatin1String("clang++");
- } else if (toolchainTypes.contains("gcc")) {
- m["c"] = m["objc"] = QLatin1String("gcc");
- m["cpp"] = m["objcpp"] = QLatin1String("g++");
+ if (toolchainTypes.contains(QLatin1String("clang"))) {
+ m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("clang");
+ m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("clang++");
+ } else if (toolchainTypes.contains(QLatin1String("gcc"))) {
+ m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("gcc");
+ m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("g++");
} else {
qDebug("WARNING: unexpected toolchain %s", qPrintable(toJSLiteral(toolchainTypes)));
return;
diff --git a/src/app/qbs-setup-toolchains/vsenvironmentdetector.cpp b/src/app/qbs-setup-toolchains/vsenvironmentdetector.cpp
index bc78c5a7a..7fa6dfef5 100644
--- a/src/app/qbs-setup-toolchains/vsenvironmentdetector.cpp
+++ b/src/app/qbs-setup-toolchains/vsenvironmentdetector.cpp
@@ -125,7 +125,8 @@ static QString vcArchitecture(const QString &arch)
void VsEnvironmentDetector::writeBatchFile(QIODevice *device, const QString &vcvarsallbat) const
{
- const QStringList varnames = QStringList() << "PATH" << "INCLUDE" << "LIB";
+ const QStringList varnames = QStringList() << QLatin1String("PATH")
+ << QLatin1String("INCLUDE") << QLatin1String("LIB");
QTextStream s(device);
s << "@echo off" << endl;
foreach (const QString &architecture, m_msvc->architectures) {
diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp
index e552f06fa..78a0a8ae0 100644
--- a/src/lib/corelib/buildgraph/qtmocscanner.cpp
+++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp
@@ -122,7 +122,8 @@ void QtMocScanner::findIncludedMocCppFiles()
= runScanner(m_cppScanner, artifact, m_scanResultCache);
foreach (const ScanResultCache::Dependency &dependency, scanResult.deps) {
QString includedFilePath = dependency.filePath();
- if (includedFilePath.startsWith("moc_") && includedFilePath.endsWith(".cpp")) {
+ if (includedFilePath.startsWith(QLatin1String("moc_"))
+ && includedFilePath.endsWith(QLatin1String(".cpp"))) {
if (m_logger.traceEnabled())
m_logger.qbsTrace() << "[QtMocScanner] " << artifact->fileName()
<< " includes " << includedFilePath;
diff --git a/src/lib/corelib/corelib.qbs b/src/lib/corelib/corelib.qbs
index a5c1ab652..1c1515bc8 100644
--- a/src/lib/corelib/corelib.qbs
+++ b/src/lib/corelib/corelib.qbs
@@ -395,6 +395,7 @@ QbsLibrary {
Group {
condition: project.enableUnitTests
name: "tests"
+ cpp.defines: outer.filter(function(def) { return def !== "QT_NO_CAST_FROM_ASCII"; })
files: [
"buildgraph/tst_buildgraph.cpp",
"buildgraph/tst_buildgraph.h",
diff --git a/src/lib/corelib/language/builtindeclarations.cpp b/src/lib/corelib/language/builtindeclarations.cpp
index 1cb0b9b14..c19950cc2 100644
--- a/src/lib/corelib/language/builtindeclarations.cpp
+++ b/src/lib/corelib/language/builtindeclarations.cpp
@@ -298,7 +298,7 @@ void BuiltinDeclarations::addProductItem()
item << buildDirProperty();
item << decl;
decl = PropertyDeclaration(QLatin1String("destinationDirectory"), PropertyDeclaration::String);
- decl.setInitialValueSource("buildDirectory");
+ decl.setInitialValueSource(QStringLiteral("buildDirectory"));
item << decl;
item << PropertyDeclaration(QLatin1String("consoleApplication"),
PropertyDeclaration::Boolean);
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp
index 203d5c0af..b7b9fbff1 100644
--- a/src/lib/corelib/language/language.cpp
+++ b/src/lib/corelib/language/language.cpp
@@ -567,8 +567,8 @@ static bool findModuleMapRecursively_impl(const QVariantMap &cfg, const QString
*result = it.value().toMap();
return true;
}
- if (findModuleMapRecursively_impl(it.value().toMap().value("modules").toMap(), moduleName,
- result)) {
+ if (findModuleMapRecursively_impl(it.value().toMap().value(QStringLiteral("modules")).toMap(),
+ moduleName, result)) {
return true;
}
}
diff --git a/src/lib/corelib/language/projectresolver.cpp b/src/lib/corelib/language/projectresolver.cpp
index 9ea7b3cd0..66d777fd2 100644
--- a/src/lib/corelib/language/projectresolver.cpp
+++ b/src/lib/corelib/language/projectresolver.cpp
@@ -665,7 +665,7 @@ void ProjectResolver::resolveRule(Item *item, ProjectContext *projectContext)
throw ErrorInfo(Tr::tr("The Rule.outputArtifacts script is not allowed in rules "
"that contain Artifact items."),
item->location());
- rule->outputFileTags = m_evaluator->fileTagsValue(item, "outputFileTags");
+ rule->outputFileTags = m_evaluator->fileTagsValue(item, QStringLiteral("outputFileTags"));
if (rule->outputFileTags.isEmpty())
throw ErrorInfo(Tr::tr("Rule.outputFileTags must be specified if "
"Rule.outputArtifacts is specified."),
diff --git a/src/lib/corelib/language/scriptengine.cpp b/src/lib/corelib/language/scriptengine.cpp
index 65094d47b..7cda02a14 100644
--- a/src/lib/corelib/language/scriptengine.cpp
+++ b/src/lib/corelib/language/scriptengine.cpp
@@ -315,7 +315,7 @@ void ScriptEngine::importProgram(const QScriptProgram &program, const QScriptVal
static QString findExtensionDir(const QStringList &searchPaths, const QString &extensionPath)
{
foreach (const QString &searchPath, searchPaths) {
- const QString dirPath = searchPath + "/imports/" + extensionPath;
+ const QString dirPath = searchPath + QStringLiteral("/imports/") + extensionPath;
QFileInfo fi(dirPath);
if (fi.exists() && fi.isDir())
return dirPath;
diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp
index 2b3ea11c8..0f399e800 100644
--- a/src/lib/corelib/language/tst_language.cpp
+++ b/src/lib/corelib/language/tst_language.cpp
@@ -28,6 +28,8 @@
**
****************************************************************************/
+#undef QT_NO_CAST_FROM_ASCII // I am qmake, and I approve this hack.
+
#include "tst_language.h"
#include <language/evaluator.h>
diff --git a/src/lib/corelib/language/value.cpp b/src/lib/corelib/language/value.cpp
index 2d9b493bf..cd354ae13 100644
--- a/src/lib/corelib/language/value.cpp
+++ b/src/lib/corelib/language/value.cpp
@@ -69,8 +69,8 @@ QString JSSourceValue::sourceCodeForEvaluation() const
return m_sourceCode.toString();
// rewrite blocks to be able to use return statements in property assignments
- static const QString prefix = "(function()";
- static const QString suffix = ")()";
+ static const QString prefix = QStringLiteral("(function()");
+ static const QString suffix = QStringLiteral(")()");
return prefix + m_sourceCode.toString() + suffix;
}
diff --git a/src/lib/corelib/tools/shellutils.cpp b/src/lib/corelib/tools/shellutils.cpp
index d6dbdfd00..a72b1939b 100644
--- a/src/lib/corelib/tools/shellutils.cpp
+++ b/src/lib/corelib/tools/shellutils.cpp
@@ -43,7 +43,7 @@ QString shellInterpreter(const QString &filePath) {
QTextStream ts(&file);
const QString shebang = ts.readLine();
if (shebang.startsWith(QLatin1String("#!"))) {
- return (shebang.mid(2).split(QRegExp("\\s"),
+ return (shebang.mid(2).split(QRegExp(QLatin1String("\\s")),
QString::SkipEmptyParts) << QString()).first();
}
}
diff --git a/src/lib/corelib/tools/tst_tools.cpp b/src/lib/corelib/tools/tst_tools.cpp
index 8c6f0a13e..4d1686f84 100644
--- a/src/lib/corelib/tools/tst_tools.cpp
+++ b/src/lib/corelib/tools/tst_tools.cpp
@@ -27,6 +27,9 @@
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
+
+#undef QT_NO_CAST_FROM_ASCII // I am qmake, and I approve this hack.
+
#include "tst_tools.h"
#include "buildoptions.h"
diff --git a/src/lib/library.pri b/src/lib/library.pri
index 0420eaa76..d1bda77e4 100644
--- a/src/lib/library.pri
+++ b/src/lib/library.pri
@@ -11,6 +11,7 @@ CONFIG(static, static|shared) {
} else {
DEFINES += QBS_LIBRARY
}
+DEFINES += QT_NO_CAST_FROM_ASCII
INCLUDEPATH += $${PWD}/../
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
win32:CONFIG(debug, debug|release):TARGET = $${TARGET}d
diff --git a/src/lib/qtprofilesetup/qtmoduleinfo.cpp b/src/lib/qtprofilesetup/qtmoduleinfo.cpp
index 8e073355a..7ae49fa4a 100644
--- a/src/lib/qtprofilesetup/qtmoduleinfo.cpp
+++ b/src/lib/qtprofilesetup/qtmoduleinfo.cpp
@@ -171,9 +171,10 @@ void QtModuleInfo::setupLibraries(const QtEnvironment &qtEnv, bool debugBuild,
if (debugBuild) {
if (!qtEnv.buildVariant.contains(QLatin1String("debug")))
return;
- const QStringList modulesNeverBuiltAsDebug = QStringList() << "bootstrap" << "qmldevtools";
+ const QStringList modulesNeverBuiltAsDebug = QStringList()
+ << QLatin1String("bootstrap") << QLatin1String("qmldevtools");
foreach (const QString &m, modulesNeverBuiltAsDebug) {
- if (qbsName == m || qbsName == m + "-private")
+ if (qbsName == m || qbsName == m + QLatin1String("-private"))
return;
}
} else if (!qtEnv.buildVariant.contains(QLatin1String("release"))) {
@@ -290,8 +291,9 @@ bool QtModuleInfo::isFramework(const QtEnvironment &qtEnv) const
if (!qtEnv.frameworkBuild || isStaticLibrary)
return false;
const QStringList modulesNeverBuiltAsFrameworks = QStringList()
- << "bootstrap" << "openglextensions" << "platformsupport" << "qmldevtools" << "uitools"
- << "harfbuzzng";
+ << QLatin1String("bootstrap") << QLatin1String("openglextensions")
+ << QLatin1String("platformsupport") << QLatin1String("qmldevtools")
+ << QLatin1String("uitools") << QLatin1String("harfbuzzng");
return !modulesNeverBuiltAsFrameworks.contains(qbsName);
}
@@ -368,7 +370,7 @@ QList<QtModuleInfo> allQt4Modules(const QtEnvironment &qtEnvironment)
<< QtModuleInfo(QLatin1String("QtXml"), QLatin1String("xml-private"),
QStringList() << QLatin1String("xml"))
<< QtModuleInfo(QLatin1String("QtXmlPatterns"), QLatin1String("xmlpatterns"),
- QStringList() << "network")
+ QStringList() << QLatin1String("network"))
<< QtModuleInfo(QLatin1String("QtXmlPatterns"),
QLatin1String("xmlpatterns-private"),
QStringList() << QLatin1String("xmlpatterns"))
diff --git a/src/lib/qtprofilesetup/qtprofilesetup.cpp b/src/lib/qtprofilesetup/qtprofilesetup.cpp
index 087ca1d78..176bcce01 100644
--- a/src/lib/qtprofilesetup/qtprofilesetup.cpp
+++ b/src/lib/qtprofilesetup/qtprofilesetup.cpp
@@ -236,10 +236,10 @@ static void createModules(Profile &profile, Settings *settings,
static QString guessMinimumWindowsVersion(const QtEnvironment &qt)
{
- if (qt.mkspecName.startsWith("winrt-"))
+ if (qt.mkspecName.startsWith(QLatin1String("winrt-")))
return QLatin1String("6.2");
- if (!qt.mkspecName.startsWith("win32-"))
+ if (!qt.mkspecName.startsWith(QLatin1String("win32-")))
return QString();
if (qt.architecture == QLatin1String("x86_64")
@@ -312,18 +312,20 @@ void doSetupQtProfile(const QString &profileName, Settings *settings,
Profile profile(profileName, settings);
profile.removeProfile();
const QString settingsTemplate(QLatin1String("Qt.core.%1"));
- profile.setValue(settingsTemplate.arg("config"), qtEnvironment.configItems);
- profile.setValue(settingsTemplate.arg("qtConfig"), qtEnvironment.qtConfigItems);
- profile.setValue(settingsTemplate.arg("binPath"), qtEnvironment.binaryPath);
- profile.setValue(settingsTemplate.arg("libPath"), qtEnvironment.libraryPath);
- profile.setValue(settingsTemplate.arg("pluginPath"), qtEnvironment.pluginPath);
- profile.setValue(settingsTemplate.arg("incPath"), qtEnvironment.includePath);
- profile.setValue(settingsTemplate.arg("mkspecPath"), qtEnvironment.mkspecPath);
- profile.setValue(settingsTemplate.arg("docPath"), qtEnvironment.documentationPath);
- profile.setValue(settingsTemplate.arg("version"), qtEnvironment.qtVersion);
- profile.setValue(settingsTemplate.arg("libInfix"), qtEnvironment.qtLibInfix);
- profile.setValue(settingsTemplate.arg("buildVariant"), qtEnvironment.buildVariant); // TODO: Remove in 1.5
- profile.setValue(settingsTemplate.arg("availableBuildVariants"), qtEnvironment.buildVariant);
+ profile.setValue(settingsTemplate.arg(QLatin1String("config")), qtEnvironment.configItems);
+ profile.setValue(settingsTemplate.arg(QLatin1String("qtConfig")), qtEnvironment.qtConfigItems);
+ profile.setValue(settingsTemplate.arg(QLatin1String("binPath")), qtEnvironment.binaryPath);
+ profile.setValue(settingsTemplate.arg(QLatin1String("libPath")), qtEnvironment.libraryPath);
+ profile.setValue(settingsTemplate.arg(QLatin1String("pluginPath")), qtEnvironment.pluginPath);
+ profile.setValue(settingsTemplate.arg(QLatin1String("incPath")), qtEnvironment.includePath);
+ profile.setValue(settingsTemplate.arg(QLatin1String("mkspecPath")), qtEnvironment.mkspecPath);
+ profile.setValue(settingsTemplate.arg(QLatin1String("docPath")),
+ qtEnvironment.documentationPath);
+ profile.setValue(settingsTemplate.arg(QLatin1String("version")), qtEnvironment.qtVersion);
+ profile.setValue(settingsTemplate.arg(QLatin1String("libInfix")), qtEnvironment.qtLibInfix);
+ profile.setValue(settingsTemplate.arg(QLatin1String("buildVariant")), qtEnvironment.buildVariant); // TODO: Remove in 1.5
+ profile.setValue(settingsTemplate.arg(QLatin1String("availableBuildVariants")),
+ qtEnvironment.buildVariant);
profile.setValue(settingsTemplate.arg(QLatin1String("staticBuild")), staticBuild);
// Set the minimum operating system versions appropriate for this Qt version
@@ -336,20 +338,20 @@ void doSetupQtProfile(const QString &profileName, Settings *settings,
qtEnvironment.qtPatchVersion);
qtEnvironment.entryPointLibsDebug = fillEntryPointLibs(qtEnvironment, qtVersion, true);
qtEnvironment.entryPointLibsRelease = fillEntryPointLibs(qtEnvironment, qtVersion, false);
- } else if (qtEnvironment.mkspecPath.contains("macx")) {
- profile.setValue(settingsTemplate.arg("frameworkBuild"), qtEnvironment.frameworkBuild);
+ } else if (qtEnvironment.mkspecPath.contains(QLatin1String("macx"))) {
+ profile.setValue(settingsTemplate.arg(QLatin1String("frameworkBuild")), qtEnvironment.frameworkBuild);
if (qtEnvironment.qtMajorVersion >= 5) {
osxVersion = QLatin1String("10.6");
} else if (qtEnvironment.qtMajorVersion == 4 && qtEnvironment.qtMinorVersion >= 6) {
QDir qconfigDir;
if (qtEnvironment.frameworkBuild) {
qconfigDir.setPath(qtEnvironment.libraryPath);
- qconfigDir.cd("QtCore.framework/Headers");
+ qconfigDir.cd(QLatin1String("QtCore.framework/Headers"));
} else {
qconfigDir.setPath(qtEnvironment.includePath);
- qconfigDir.cd("Qt");
+ qconfigDir.cd(QLatin1String("Qt"));
}
- QFile qconfig(qconfigDir.absoluteFilePath("qconfig.h"));
+ QFile qconfig(qconfigDir.absoluteFilePath(QLatin1String("qconfig.h")));
if (qconfig.open(QIODevice::ReadOnly)) {
bool qtCocoaBuild = false;
QTextStream ts(&qconfig);
@@ -373,14 +375,14 @@ void doSetupQtProfile(const QString &profileName, Settings *settings,
}
}
- if (qtEnvironment.qtConfigItems.contains("c++11"))
+ if (qtEnvironment.qtConfigItems.contains(QLatin1String("c++11")))
osxVersion = QLatin1String("10.7");
}
- if (qtEnvironment.mkspecPath.contains("ios") && qtEnvironment.qtMajorVersion >= 5)
+ if (qtEnvironment.mkspecPath.contains(QLatin1String("ios")) && qtEnvironment.qtMajorVersion >= 5)
iosVersion = QLatin1String("5.0");
- if (qtEnvironment.mkspecPath.contains("android")) {
+ if (qtEnvironment.mkspecPath.contains(QLatin1String("android"))) {
if (qtEnvironment.qtMajorVersion >= 5)
androidVersion = QLatin1String("2.3");
else if (qtEnvironment.qtMajorVersion == 4 && qtEnvironment.qtMinorVersion >= 8)