From 342d65f7a2cf1166e0588cbe507e51310863c133 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 7 May 2013 14:25:13 +0200 Subject: [PATCH] Make it possible for a module to specify bundling single files To make sure libQt5QuickParticles.so is loaded for Qt Quick applications, we need to be able to specify bundling specific files, not just subdirectories. Task-number: QTCREATORBUG-9299 Change-Id: I743ee5ea714355ba6398378f4f54b6ede64d4c85 Reviewed-by: Daniel Teske --- .../android/androidpackagecreationstep.cpp | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/plugins/android/androidpackagecreationstep.cpp b/src/plugins/android/androidpackagecreationstep.cpp index 0464011980e..c80111d629e 100644 --- a/src/plugins/android/androidpackagecreationstep.cpp +++ b/src/plugins/android/androidpackagecreationstep.cpp @@ -520,12 +520,20 @@ void AndroidPackageCreationStep::collectFiles(QList *deployList, QSet alreadyListed; foreach (QString bundledFile, m_otherBundledFiles) { - if (!bundledFile.endsWith(QLatin1Char('/'))) - bundledFile.append(QLatin1Char('/')); + QStringList allFiles; + if (QFileInfo(qtVersionSourcePath + QLatin1Char('/') + bundledFile).isDir()) { + if (!bundledFile.endsWith(QLatin1Char('/'))) + bundledFile.append(QLatin1Char('/')); + + allFiles = collectRelativeFilePaths(qtVersionSourcePath + QLatin1Char('/') + bundledFile); + } else { + // If we need to bundle a specific file, we just add an empty string and the file + // names and data will be prepared correctly in the loop below. + allFiles = QStringList(QString()); + } - QStringList allFiles = collectRelativeFilePaths(qtVersionSourcePath + QLatin1Char('/') + bundledFile); foreach (QString file, allFiles) { - QString fullPath = qtVersionSourcePath + QLatin1Char('/') + bundledFile + QLatin1Char('/') + file; + QString fullPath = qtVersionSourcePath + QLatin1Char('/') + bundledFile + file; if (alreadyListed.contains(fullPath)) continue; @@ -534,22 +542,31 @@ void AndroidPackageCreationStep::collectFiles(QList *deployList, QString garbledFileName; QString destinationPath; bool shouldStrip = false; - if (file.endsWith(QLatin1String(".so"))) { - garbledFileName = QLatin1String("lib") - + AndroidManager::libraryPrefix() - + QString(bundledFile).replace(QLatin1Char('/'), QLatin1Char('_')) - + QString(file).replace(QLatin1Char('/'), QLatin1Char('_')); + + QString fullFileName = bundledFile + file; + if (fullFileName.endsWith(QLatin1String(".so"))) { + if (fullFileName.startsWith(QLatin1String("lib/"))) { + // Special case when the destination folder is lib/ + // Since this is also the source folder, there is no need to garble the file + // name and copy it. We also won't have write access to this folder, so we + // couldn't if we wanted to. + garbledFileName = fullFileName.mid(sizeof("lib/") - 1); + } else { + garbledFileName = QLatin1String("lib") + + AndroidManager::libraryPrefix() + + QString(fullFileName).replace(QLatin1Char('/'), QLatin1Char('_')); + } destinationPath = androidLibPath + QLatin1Char('/') + garbledFileName; shouldStrip = true; } else { - garbledFileName = AndroidManager::libraryPrefix() + bundledFile + file; + garbledFileName = AndroidManager::libraryPrefix() + fullFileName; destinationPath = androidAssetsPath + garbledFileName; } deployList->append(DeployItem(fullPath, 0, destinationPath, shouldStrip)); pluginsAndImportsList->append(DeployItem(garbledFileName, 0, - bundledFile + file, + fullFileName, shouldStrip)); } }