Commit 53261d90 authored by Eskil Abrahamsen Blomfeldt's avatar Eskil Abrahamsen Blomfeldt
Browse files

androiddeployqt: Fix dependency order for XML dependencies


Although this bug was there in Qt 5.3 as well, something has changed
in our build system that causes readelf to return libraries in a
different order than before. In particular, the QtMultimedia dependency
is now listed before QtQuick if it's listed first in the QT variable in
the .pro file. This caused the following bug:

When we read the manual dependencies from the XML specification,
then we assume the dependencies of these are already met (otherwise
they should not be added). Therefore, we need to load these
dependencies last, not intermingled with the actual direct
dependencies of the application.

What would happen is that Qt5Multimedia came before Qt5Quick, and
triggered adding Qt5MultimediaQuick_p before Qt5Quick. This of course
depends on Qt5Quick so it needs to be added after it (which is why
it is only added if the application itself depends on Qt Quick).

Change-Id: Ifa97d85645cff49ebf65d4ce3fc2101506346695
Task-number: QTBUG-42012
Reviewed-by: default avatarChristian Stromme <christian.stromme@digia.com>
Reviewed-by: default avatarBogDan Vatra <bogdan@kde.org>
Showing with 6 additions and 0 deletions
...@@ -1603,6 +1603,7 @@ bool readDependenciesFromElf(Options *options, ...@@ -1603,6 +1603,7 @@ bool readDependenciesFromElf(Options *options,
fprintf(stdout, " %s\n", qPrintable(dep)); fprintf(stdout, " %s\n", qPrintable(dep));
} }
// Recursively add dependencies from ELF and supplementary XML information // Recursively add dependencies from ELF and supplementary XML information
QList<QString> dependenciesToCheck;
foreach (QString dependency, dependencies) { foreach (QString dependency, dependencies) {
if (usedDependencies->contains(dependency)) if (usedDependencies->contains(dependency))
continue; continue;
...@@ -1619,12 +1620,17 @@ bool readDependenciesFromElf(Options *options, ...@@ -1619,12 +1620,17 @@ bool readDependenciesFromElf(Options *options,
options->qtDependencies.append(QtDependency(dependency, absoluteDependencyPath)); options->qtDependencies.append(QtDependency(dependency, absoluteDependencyPath));
if (options->verbose) if (options->verbose)
fprintf(stdout, "Appending dependency: %s\n", qPrintable(dependency)); fprintf(stdout, "Appending dependency: %s\n", qPrintable(dependency));
dependenciesToCheck.append(dependency);
}
foreach (QString dependency, dependenciesToCheck) {
QString qtBaseName = dependency.mid(sizeof("lib/lib") - 1); QString qtBaseName = dependency.mid(sizeof("lib/lib") - 1);
qtBaseName = qtBaseName.left(qtBaseName.size() - (sizeof(".so") - 1)); qtBaseName = qtBaseName.left(qtBaseName.size() - (sizeof(".so") - 1));
if (!readAndroidDependencyXml(options, qtBaseName, usedDependencies, remainingDependencies)) { if (!readAndroidDependencyXml(options, qtBaseName, usedDependencies, remainingDependencies)) {
return false; return false;
} }
} }
return true; return true;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment