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 <daniel.teske@digia.com>
This commit is contained in:
Eskil Abrahamsen Blomfeldt
2013-05-07 14:25:13 +02:00
parent ee9ec5a4d0
commit 342d65f7a2

View File

@@ -520,12 +520,20 @@ void AndroidPackageCreationStep::collectFiles(QList<DeployItem> *deployList,
QSet<QString> alreadyListed; QSet<QString> alreadyListed;
foreach (QString bundledFile, m_otherBundledFiles) { foreach (QString bundledFile, m_otherBundledFiles) {
if (!bundledFile.endsWith(QLatin1Char('/'))) QStringList allFiles;
bundledFile.append(QLatin1Char('/')); 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) { foreach (QString file, allFiles) {
QString fullPath = qtVersionSourcePath + QLatin1Char('/') + bundledFile + QLatin1Char('/') + file; QString fullPath = qtVersionSourcePath + QLatin1Char('/') + bundledFile + file;
if (alreadyListed.contains(fullPath)) if (alreadyListed.contains(fullPath))
continue; continue;
@@ -534,22 +542,31 @@ void AndroidPackageCreationStep::collectFiles(QList<DeployItem> *deployList,
QString garbledFileName; QString garbledFileName;
QString destinationPath; QString destinationPath;
bool shouldStrip = false; bool shouldStrip = false;
if (file.endsWith(QLatin1String(".so"))) {
garbledFileName = QLatin1String("lib") QString fullFileName = bundledFile + file;
+ AndroidManager::libraryPrefix() if (fullFileName.endsWith(QLatin1String(".so"))) {
+ QString(bundledFile).replace(QLatin1Char('/'), QLatin1Char('_')) if (fullFileName.startsWith(QLatin1String("lib/"))) {
+ QString(file).replace(QLatin1Char('/'), QLatin1Char('_')); // 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; destinationPath = androidLibPath + QLatin1Char('/') + garbledFileName;
shouldStrip = true; shouldStrip = true;
} else { } else {
garbledFileName = AndroidManager::libraryPrefix() + bundledFile + file; garbledFileName = AndroidManager::libraryPrefix() + fullFileName;
destinationPath = androidAssetsPath + garbledFileName; destinationPath = androidAssetsPath + garbledFileName;
} }
deployList->append(DeployItem(fullPath, 0, destinationPath, shouldStrip)); deployList->append(DeployItem(fullPath, 0, destinationPath, shouldStrip));
pluginsAndImportsList->append(DeployItem(garbledFileName, pluginsAndImportsList->append(DeployItem(garbledFileName,
0, 0,
bundledFile + file, fullFileName,
shouldStrip)); shouldStrip));
} }
} }