summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2017-03-13 22:49:46 +0100
committerMarc Mutz <marc.mutz@kdab.com>2017-03-23 09:09:49 +0000
commit919d07e6809a6705941a9819ba145062a947fa39 (patch)
tree27cbd757685bc9a3bb9be3a3ec9414bb44cdda03
parentc5e54d58e8763898db81e1f3b5b5460d6e4b9455 (diff)
downloadqttools-919d07e6809a6705941a9819ba145062a947fa39.tar.gz
androiddeployqt: eradicate Q_FOREACH
and mark the tool as Q_FOREACH-free. Change-Id: I1f9cd6111cde26a8a09b401207d80e5bf7dad833 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: BogDan Vatra <bogdan@kdab.com>
-rw-r--r--src/androiddeployqt/androiddeployqt.pro1
-rw-r--r--src/androiddeployqt/main.cpp121
2 files changed, 64 insertions, 58 deletions
diff --git a/src/androiddeployqt/androiddeployqt.pro b/src/androiddeployqt/androiddeployqt.pro
index 7b003a779..2d0f5b41d 100644
--- a/src/androiddeployqt/androiddeployqt.pro
+++ b/src/androiddeployqt/androiddeployqt.pro
@@ -8,6 +8,7 @@ SOURCES += \
windows: QMAKE_CXXFLAGS += -U__STRICT_ANSI__
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
+DEFINES += QT_NO_FOREACH
load(qt_app)
diff --git a/src/androiddeployqt/main.cpp b/src/androiddeployqt/main.cpp
index 84ca97434..26e9adb7b 100644
--- a/src/androiddeployqt/main.cpp
+++ b/src/androiddeployqt/main.cpp
@@ -51,8 +51,8 @@ void deleteRecursively(const QString &dirName)
if (!dir.exists())
return;
- QFileInfoList entries = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- foreach (QFileInfo entry, entries) {
+ const QFileInfoList entries = dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ for (const QFileInfo &entry : entries) {
if (entry.isDir())
deleteRecursively(entry.absoluteFilePath());
else
@@ -283,11 +283,11 @@ void deleteMissingFiles(const Options &options, const QDir &srcDir, const QDir &
if (options.verbose)
fprintf(stdout, "Delete missing files %s %s\n", qPrintable(srcDir.absolutePath()), qPrintable(dstDir.absolutePath()));
- QFileInfoList srcEntries = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- QFileInfoList dstEntries = dstDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- foreach (const QFileInfo &dst, dstEntries) {
+ const QFileInfoList srcEntries = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ const QFileInfoList dstEntries = dstDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ for (const QFileInfo &dst : dstEntries) {
bool found = false;
- foreach (const QFileInfo &src, srcEntries)
+ for (const QFileInfo &src : srcEntries)
if (dst.fileName() == src.fileName()) {
if (dst.isDir())
deleteMissingFiles(options, src.absoluteFilePath(), dst.absoluteFilePath());
@@ -779,8 +779,8 @@ bool readInputFile(Options *options)
{
const QJsonValue deploymentDependencies = jsonObject.value(QStringLiteral("deployment-dependencies"));
if (!deploymentDependencies.isUndefined()) {
- QStringList dependencies = deploymentDependencies.toString().split(QLatin1Char(','));
- foreach (QString dependency, dependencies) {
+ const auto dependencies = deploymentDependencies.toString().splitRef(QLatin1Char(','));
+ for (const QStringRef &dependency : dependencies) {
QString path = options->qtInstallDirectory + QLatin1Char('/') + dependency;
if (QFileInfo(path).isDir()) {
QDirIterator iterator(path, QDirIterator::Subdirectories);
@@ -793,7 +793,7 @@ bool readInputFile(Options *options)
}
}
} else {
- options->qtDependencies.append(QtDependency(dependency, path));
+ options->qtDependencies.append(QtDependency(dependency.toString(), path));
}
}
}
@@ -887,8 +887,8 @@ bool readInputFile(Options *options)
bool copyFiles(const QDir &sourceDirectory, const QDir &destinationDirectory, bool verbose, bool forceOverwrite = false)
{
- QFileInfoList entries = sourceDirectory.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- foreach (QFileInfo entry, entries) {
+ const QFileInfoList entries = sourceDirectory.entryInfoList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ for (const QFileInfo &entry : entries) {
if (entry.isDir()) {
QDir dir(entry.absoluteFilePath());
if (!destinationDirectory.mkpath(dir.dirName())) {
@@ -910,7 +910,8 @@ bool copyFiles(const QDir &sourceDirectory, const QDir &destinationDirectory, bo
void cleanTopFolders(const Options &options, const QDir &srcDir, const QString &dstDir)
{
- foreach (const QFileInfo &dir, srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs)) {
+ const auto dirs = srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs);
+ for (const QFileInfo &dir : dirs) {
if (dir.fileName() != QLatin1String("libs"))
deleteMissingFiles(options, dir.absoluteFilePath(), dstDir + dir.fileName());
}
@@ -1001,7 +1002,7 @@ bool copyAndroidExtraLibs(const Options &options)
if (options.verbose)
fprintf(stdout, "Copying %d external libraries to package.\n", options.extraLibs.size());
- foreach (QString extraLib, options.extraLibs) {
+ for (const QString &extraLib : options.extraLibs) {
QFileInfo extraLibInfo(extraLib);
if (!extraLibInfo.exists()) {
fprintf(stderr, "External library %s does not exist!\n", qPrintable(extraLib));
@@ -1029,14 +1030,17 @@ bool copyAndroidExtraLibs(const Options &options)
QStringList allFilesInside(const QDir& current, const QDir& rootDir)
{
- QStringList files;
- foreach (QString dir, current.entryList(QDir::Dirs|QDir::NoDotAndDotDot)) {
- files += allFilesInside(QDir(current.filePath(dir)), rootDir);
+ QStringList result;
+ const auto dirs = current.entryList(QDir::Dirs|QDir::NoDotAndDotDot);
+ const auto files = current.entryList(QDir::Files);
+ result.reserve(dirs.size() + files.size());
+ for (const QString &dir : dirs) {
+ result += allFilesInside(QDir(current.filePath(dir)), rootDir);
}
- foreach (QString file, current.entryList(QDir::Files)) {
- files += rootDir.relativeFilePath(current.filePath(file));
+ for (const QString &file : files) {
+ result += rootDir.relativeFilePath(current.filePath(file));
}
- return files;
+ return result;
}
bool copyAndroidExtraResources(const Options &options)
@@ -1047,7 +1051,7 @@ bool copyAndroidExtraResources(const Options &options)
if (options.verbose)
fprintf(stdout, "Copying %d external resources to package.\n", options.extraPlugins.size());
- foreach (QString extraResource, options.extraPlugins) {
+ for (const QString &extraResource : options.extraPlugins) {
QFileInfo extraResourceInfo(extraResource);
if (!extraResourceInfo.exists() || !extraResourceInfo.isDir()) {
fprintf(stderr, "External resource %s does not exist or not a correct directory!\n", qPrintable(extraResource));
@@ -1058,8 +1062,8 @@ bool copyAndroidExtraResources(const Options &options)
QString assetsDir = options.outputDirectory + QStringLiteral("/assets/") + resourceDir.dirName() + QLatin1Char('/');
QString libsDir = options.outputDirectory + QStringLiteral("/libs/") + options.architecture + QLatin1Char('/');
- QStringList files = allFilesInside(resourceDir, resourceDir);
- foreach (const QString &resourceFile, files) {
+ const QStringList files = allFilesInside(resourceDir, resourceDir);
+ for (const QString &resourceFile : files) {
QString originFile(resourceDir.filePath(resourceFile));
QString destinationFile;
if (!resourceFile.endsWith(QLatin1String(".so"))) {
@@ -1136,7 +1140,7 @@ bool updateLibsXml(const Options &options)
QString qtLibs = QLatin1String("<item>gnustl_shared</item>\n");
QString bundledInLibs;
QString bundledInAssets;
- foreach (Options::BundledFile bundledFile, options.bundledFiles) {
+ for (const Options::BundledFile &bundledFile : options.bundledFiles) {
if (bundledFile.second.startsWith(QLatin1String("lib/"))) {
QString s = bundledFile.second.mid(sizeof("lib/lib") - 1);
s.chop(sizeof(".so") - 1);
@@ -1153,10 +1157,10 @@ bool updateLibsXml(const Options &options)
}
if (!options.extraPlugins.isEmpty()) {
- foreach (QString extraRes, options.extraPlugins) {
+ for (const QString &extraRes : options.extraPlugins) {
QDir resourceDir(extraRes);
- QStringList files = allFilesInside(resourceDir, resourceDir);
- foreach (const QString &file, files) {
+ const QStringList files = allFilesInside(resourceDir, resourceDir);
+ for (const QString &file : files) {
QString destinationPath = resourceDir.dirName() + QLatin1Char('/') + file;
if (!file.endsWith(QLatin1String(".so"))) {
bundledInAssets += QStringLiteral("<item>%1:%1</item>\n")
@@ -1180,7 +1184,7 @@ bool updateLibsXml(const Options &options)
QString extraLibs;
if (!options.extraLibs.isEmpty()) {
- foreach (QString extraLib, options.extraLibs) {
+ for (const QString extraLib : options.extraLibs) {
QFileInfo extraLibInfo(extraLib);
QString name = extraLibInfo.fileName().mid(sizeof("lib") - 1);
name.chop(sizeof(".so") - 1);
@@ -1265,7 +1269,7 @@ bool updateAndroidManifest(Options &options)
// If .pro file overrides dependency detection, we need to see which platform plugin they picked
if (localLibs.isEmpty()) {
QString plugin;
- foreach (QtDependency qtDependency, options.qtDependencies) {
+ for (const QtDependency &qtDependency : qAsConst(options.qtDependencies)) {
if (qtDependency.relativePath.endsWith(QLatin1String("libqtforandroid.so"))
|| qtDependency.relativePath.endsWith(QLatin1String("libqtforandroidGL.so"))) {
if (!plugin.isEmpty() && plugin != qtDependency.relativePath) {
@@ -1288,7 +1292,7 @@ bool updateAndroidManifest(Options &options)
}
bool usesGL = false;
- foreach (QtDependency qtDependency, options.qtDependencies) {
+ for (const QtDependency &qtDependency : qAsConst(options.qtDependencies)) {
if (qtDependency.relativePath.endsWith(QLatin1String("libQt5OpenGL.so"))
|| qtDependency.relativePath.endsWith(QLatin1String("libQt5Quick.so"))) {
usesGL = true;
@@ -1309,12 +1313,12 @@ bool updateAndroidManifest(Options &options)
= (options.deploymentMechanism != Options::Ministro) ? QString::fromLatin1("1") : QString::fromLatin1("0");
QString permissions;
- foreach (QString permission, options.permissions)
+ for (const QString &permission : qAsConst(options.permissions))
permissions += QString::fromLatin1(" <uses-permission android:name=\"%1\" />\n").arg(permission);
replacements[QLatin1String("<!-- %%INSERT_PERMISSIONS -->")] = permissions;
QString features;
- foreach (QString feature, options.features)
+ for (const QString &feature : qAsConst(options.features))
features += QStringLiteral(" <uses-feature android:name=\"%1\" android:required=\"false\" />\n").arg(feature);
if (usesGL)
features += QStringLiteral(" <uses-feature android:glEsVersion=\"0x00020000\" android:required=\"true\" />");
@@ -1398,9 +1402,9 @@ QList<QtDependency> findFilesRecursively(const Options &options, const QFileInfo
QList<QtDependency> ret;
QDir dir(info.filePath());
- QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+ const QStringList entries = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
- foreach (QString entry, entries) {
+ for (const QString &entry : entries) {
QString s = info.absoluteFilePath() + QLatin1Char('/') + entry;
ret += findFilesRecursively(options, s, rootPath);
}
@@ -1451,8 +1455,8 @@ bool readAndroidDependencyXml(Options *options,
if (!options->rootPath.isEmpty() && (file == QLatin1String("qml") || file == QLatin1String("qml/")))
continue;
- QList<QtDependency> fileNames = findFilesRecursively(*options, file);
- foreach (QtDependency fileName, fileNames) {
+ const QList<QtDependency> fileNames = findFilesRecursively(*options, file);
+ for (const QtDependency &fileName : fileNames) {
if (usedDependencies->contains(fileName.absolutePath))
continue;
@@ -1572,16 +1576,16 @@ bool readDependenciesFromElf(Options *options,
QSet<QString> *remainingDependencies)
{
// Get dependencies on libraries in $QTDIR/lib
- QStringList dependencies = getQtLibsFromElf(*options, fileName);
+ const QStringList dependencies = getQtLibsFromElf(*options, fileName);
if (options->verbose) {
fprintf(stdout, "Reading dependencies from %s\n", qPrintable(fileName));
- foreach (QString dep, dependencies)
+ for (const QString &dep : dependencies)
fprintf(stdout, " %s\n", qPrintable(dep));
}
// Recursively add dependencies from ELF and supplementary XML information
QList<QString> dependenciesToCheck;
- foreach (QString dependency, dependencies) {
+ for (const QString &dependency : dependencies) {
if (usedDependencies->contains(dependency))
continue;
@@ -1600,7 +1604,7 @@ bool readDependenciesFromElf(Options *options,
dependenciesToCheck.append(dependency);
}
- foreach (QString dependency, dependenciesToCheck) {
+ for (const QString &dependency : qAsConst(dependenciesToCheck)) {
QString qtBaseName = dependency.mid(sizeof("lib/lib") - 1);
qtBaseName = qtBaseName.left(qtBaseName.size() - (sizeof(".so") - 1));
if (!readAndroidDependencyXml(options, qtBaseName, usedDependencies, remainingDependencies)) {
@@ -1640,7 +1644,7 @@ bool scanImports(Options *options, QSet<QString> *usedDependencies)
QStringList importPaths;
importPaths += shellQuote(options->qtInstallDirectory + QLatin1String("/qml"));
importPaths += rootPath;
- foreach (QString qmlImportPath, options->qmlImportPaths)
+ for (const QString &qmlImportPath : qAsConst(options->qmlImportPaths))
importPaths += shellQuote(qmlImportPath);
qmlImportScanner += QString::fromLatin1(" -rootPath %1 -importPath %2")
@@ -1701,7 +1705,7 @@ bool scanImports(Options *options, QSet<QString> *usedDependencies)
}
QString importPathOfThisImport;
- foreach (QString importPath, importPaths) {
+ for (const QString &importPath : qAsConst(importPaths)) {
#if defined(Q_OS_WIN32)
Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive;
#else
@@ -1722,8 +1726,8 @@ bool scanImports(Options *options, QSet<QString> *usedDependencies)
QDir dir(importPathOfThisImport);
importPathOfThisImport = dir.absolutePath() + QLatin1Char('/');
- QList<QtDependency> fileNames = findFilesRecursively(*options, info, importPathOfThisImport);
- foreach (QtDependency fileName, fileNames) {
+ const QList<QtDependency> fileNames = findFilesRecursively(*options, info, importPathOfThisImport);
+ for (QtDependency fileName : fileNames) {
if (usedDependencies->contains(fileName.absolutePath))
continue;
@@ -1860,8 +1864,8 @@ bool stripLibraries(const Options &options)
QString libraryPath = options.outputDirectory
+ QLatin1String("/libs/")
+ options.architecture;
- QStringList libraries = QDir(libraryPath).entryList(QDir::Files);
- foreach (QString library, libraries) {
+ const QStringList libraries = QDir(libraryPath).entryList(QDir::Files);
+ for (const QString &library : libraries) {
if (library.endsWith(QLatin1String(".so"))) {
if (!stripFile(options, libraryPath + QLatin1Char('/') + library))
return false;
@@ -2000,7 +2004,8 @@ bool goodToCopy(const Options *options, const QString &file, QStringList *unmetD
return true;
bool ret = true;
- foreach (const QString &lib, getQtLibsFromElf(*options, file)) {
+ const auto libs = getQtLibsFromElf(*options, file);
+ for (const QString &lib : libs) {
if (!options->qtDependencies.contains(QtDependency(lib, options->qtInstallDirectory + QLatin1Char('/') + lib))) {
ret = false;
unmetDependencies->append(lib);
@@ -2078,7 +2083,7 @@ bool copyQtFiles(Options *options)
}
}
- foreach (QtDependency qtDependency, options->qtDependencies)
+ for (const QtDependency &qtDependency : qAsConst(options->qtDependencies))
options->bundledFiles += qMakePair(qtDependency.relativePath, qtDependency.relativePath);
} else {
if (!options->build)
@@ -2089,7 +2094,7 @@ bool copyQtFiles(Options *options)
// Copy other Qt dependencies
QString libDestinationDirectory = libsDirectory + options->architecture + QLatin1Char('/');
QString assetsDestinationDirectory = QLatin1String("assets/--Added-by-androiddeployqt--/");
- foreach (QtDependency qtDependency, options->qtDependencies) {
+ for (const QtDependency &qtDependency : qAsConst(options->qtDependencies)) {
QString sourceFileName = qtDependency.absolutePath;
QString destinationFileName;
@@ -2199,8 +2204,8 @@ bool createAndroidProject(const Options &options)
pclose(androidToolCommand);
// If the project has subprojects inside the current folder, we need to also run android update on these.
- QStringList libraryProjects = getLibraryProjectsInOutputFolder(options);
- foreach (QString libraryProject, libraryProjects) {
+ const QStringList libraryProjects = getLibraryProjectsInOutputFolder(options);
+ for (const QString &libraryProject : libraryProjects) {
if (options.verbose)
fprintf(stdout, "Updating subproject %s\n", qPrintable(libraryProject));
@@ -2233,8 +2238,8 @@ QString findInPath(const QString &fileName)
QLatin1Char separator(':');
#endif
- QStringList paths = path.split(separator);
- foreach (QString path, paths) {
+ const QStringList paths = path.split(separator);
+ for (const QString &path : paths) {
QFileInfo fileInfo(path + QLatin1Char('/') + fileName);
if (fileInfo.exists() && fileInfo.isFile() && fileInfo.isExecutable())
return path + QLatin1Char('/') + fileName;
@@ -2310,7 +2315,8 @@ static GradleProperties readGradleProperties(const QString &path)
if (!file.open(QIODevice::ReadOnly))
return properties;
- foreach (const QByteArray &line, file.readAll().split('\n')) {
+ const auto lines = file.readAll().split('\n');
+ for (const QByteArray &line : lines) {
if (line.trimmed().startsWith('#'))
continue;
@@ -2895,11 +2901,10 @@ bool generateAssetsFileList(const Options &options)
QDataStream stream(&file);
stream.setVersion(QDataStream::Qt_5_3);
- QList<QString> directories = directoryContents.keys();
- foreach (const QString &directory, directories) {
- QStringList entryList = directoryContents.value(directory);
- stream << directory << entryList.size();
- foreach (const QString &entry, entryList)
+ for (auto it = directoryContents.cbegin(), end = directoryContents.cend(); it != end; ++it) {
+ const QStringList &entryList = it.value();
+ stream << it.key() << entryList.size();
+ for (const QString &entry : entryList)
stream << entry;
}
} else {