qtsupport: collect the Abi of all QtCore libraries

ios now uses libQt5Core_iphonesimulator.a and libQt5Core.a for device
and simulator, this changes detects both architectures.

Change-Id: I0e2883c06355eb2b75aeeba4365c8aea14bb8ced
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
This commit is contained in:
Fawzi Mohamed
2013-10-31 19:35:39 +01:00
parent c56a106dbe
commit 08bb147153
8 changed files with 27 additions and 23 deletions

View File

@@ -92,7 +92,7 @@ QString AndroidQtVersion::invalidReason() const
QList<ProjectExplorer::Abi> AndroidQtVersion::detectQtAbis() const QList<ProjectExplorer::Abi> AndroidQtVersion::detectQtAbis() const
{ {
QList<ProjectExplorer::Abi> abis = qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString())); QList<ProjectExplorer::Abi> abis = qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
for (int i = 0; i < abis.count(); ++i) { for (int i = 0; i < abis.count(); ++i) {
abis[i] = Abi(abis.at(i).architecture(), abis[i] = Abi(abis.at(i).architecture(),
abis.at(i).os(), abis.at(i).os(),

View File

@@ -90,7 +90,7 @@ QString IosQtVersion::invalidReason() const
QList<ProjectExplorer::Abi> IosQtVersion::detectQtAbis() const QList<ProjectExplorer::Abi> IosQtVersion::detectQtAbis() const
{ {
QList<ProjectExplorer::Abi> abis = qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString())); QList<ProjectExplorer::Abi> abis = qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
for (int i = 0; i < abis.count(); ++i) { for (int i = 0; i < abis.count(); ++i) {
abis[i] = Abi(abis.at(i).architecture(), abis[i] = Abi(abis.at(i).architecture(),
abis.at(i).os(), abis.at(i).os(),

View File

@@ -90,7 +90,7 @@ void QnxAbstractQtVersion::fromMap(const QVariantMap &map)
QList<ProjectExplorer::Abi> QnxAbstractQtVersion::detectQtAbis() const QList<ProjectExplorer::Abi> QnxAbstractQtVersion::detectQtAbis() const
{ {
ensureMkSpecParsed(); ensureMkSpecParsed();
return qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString())); return qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
} }
void QnxAbstractQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const void QnxAbstractQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const

View File

@@ -1517,13 +1517,14 @@ void BaseQtVersion::buildDebuggingHelper(ToolChain *tc, int tools)
ProgressManager::addTask(task, taskName, "Qt::BuildHelpers"); ProgressManager::addTask(task, taskName, "Qt::BuildHelpers");
} }
FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionInfo, const QString &versionString) QList<FileName> BaseQtVersion::qtCorePaths(const QHash<QString,QString> &versionInfo, const QString &versionString)
{ {
QStringList dirs; QStringList dirs;
dirs << qmakeProperty(versionInfo, "QT_INSTALL_LIBS") dirs << qmakeProperty(versionInfo, "QT_INSTALL_LIBS")
<< qmakeProperty(versionInfo, "QT_INSTALL_BINS"); << qmakeProperty(versionInfo, "QT_INSTALL_BINS");
QFileInfoList staticLibs; QList<FileName> staticLibs;
QList<FileName> dynamicLibs;
foreach (const QString &dir, dirs) { foreach (const QString &dir, dirs) {
if (dir.isEmpty()) if (dir.isEmpty())
continue; continue;
@@ -1536,33 +1537,35 @@ FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionInfo, co
&& file.endsWith(QLatin1String(".framework"))) { && file.endsWith(QLatin1String(".framework"))) {
// handle Framework // handle Framework
FileName lib(info); FileName lib(info);
lib.appendPath(file.left(file.lastIndexOf(QLatin1Char('.')))); dynamicLibs.append(lib.appendPath(file.left(file.lastIndexOf(QLatin1Char('.')))));
return lib; } else if (info.isReadable()) {
}
if (info.isReadable()) {
if (file.startsWith(QLatin1String("libQtCore")) if (file.startsWith(QLatin1String("libQtCore"))
|| file.startsWith(QLatin1String("libQt5Core")) || file.startsWith(QLatin1String("libQt5Core"))
|| file.startsWith(QLatin1String("QtCore")) || file.startsWith(QLatin1String("QtCore"))
|| file.startsWith(QLatin1String("Qt5Core"))) { || file.startsWith(QLatin1String("Qt5Core"))) {
// Only handle static libs if we can not find dynamic ones:
if (file.endsWith(QLatin1String(".a")) || file.endsWith(QLatin1String(".lib"))) if (file.endsWith(QLatin1String(".a")) || file.endsWith(QLatin1String(".lib")))
staticLibs.append(info); staticLibs.append(FileName(info));
else if (file.endsWith(QLatin1String(".dll")) else if (file.endsWith(QLatin1String(".dll"))
|| file.endsWith(QString::fromLatin1(".so.") + versionString) || file.endsWith(QString::fromLatin1(".so.") + versionString)
|| file.endsWith(QLatin1String(".so")) || file.endsWith(QLatin1String(".so"))
|| file.endsWith(QLatin1Char('.') + versionString + QLatin1String(".dylib"))) || file.endsWith(QLatin1Char('.') + versionString + QLatin1String(".dylib")))
return FileName(info); dynamicLibs.append(FileName(info));
} }
} }
} }
} }
// Return path to first static library found: // Only handle static libs if we can not find dynamic ones:
if (!staticLibs.isEmpty()) if (dynamicLibs.isEmpty())
return FileName(staticLibs.at(0)); return staticLibs;
return FileName(); return dynamicLibs;
} }
QList<Abi> BaseQtVersion::qtAbisFromLibrary(const FileName &coreLibrary) QList<Abi> BaseQtVersion::qtAbisFromLibrary(const QList<FileName> &coreLibraries)
{ {
return Abi::abisOfBinary(coreLibrary); QList<Abi> res;
foreach (const FileName &library, coreLibraries)
foreach (const Abi &abi, Abi::abisOfBinary(library))
if (!res.contains(abi))
res.append(abi);
return res;
} }

View File

@@ -247,8 +247,9 @@ protected:
virtual QList<ProjectExplorer::Task> reportIssuesImpl(const QString &proFile, const QString &buildDir) const; virtual QList<ProjectExplorer::Task> reportIssuesImpl(const QString &proFile, const QString &buildDir) const;
// helper function for desktop and simulator to figure out the supported abis based on the libraries // helper function for desktop and simulator to figure out the supported abis based on the libraries
static Utils::FileName qtCorePath(const QHash<QString,QString> &versionInfo, const QString &versionString); static QList<Utils::FileName> qtCorePaths(const QHash<QString,QString> &versionInfo,
static QList<ProjectExplorer::Abi> qtAbisFromLibrary(const Utils::FileName &coreLibrary); const QString &versionString);
static QList<ProjectExplorer::Abi> qtAbisFromLibrary(const QList<Utils::FileName> &coreLibraries);
void ensureMkSpecParsed() const; void ensureMkSpecParsed() const;
virtual void parseMkSpec(ProFileEvaluator *) const; virtual void parseMkSpec(ProFileEvaluator *) const;

View File

@@ -76,7 +76,7 @@ QStringList DesktopQtVersion::warningReason() const
QList<ProjectExplorer::Abi> DesktopQtVersion::detectQtAbis() const QList<ProjectExplorer::Abi> DesktopQtVersion::detectQtAbis() const
{ {
return qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString())); return qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
} }
QString DesktopQtVersion::description() const QString DesktopQtVersion::description() const

View File

@@ -77,7 +77,7 @@ QStringList SimulatorQtVersion::warningReason() const
QList<ProjectExplorer::Abi> SimulatorQtVersion::detectQtAbis() const QList<ProjectExplorer::Abi> SimulatorQtVersion::detectQtAbis() const
{ {
ensureMkSpecParsed(); ensureMkSpecParsed();
return qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString())); return qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
} }
QString SimulatorQtVersion::description() const QString SimulatorQtVersion::description() const

View File

@@ -63,7 +63,7 @@ QString EmbeddedLinuxQtVersion::type() const
QList<ProjectExplorer::Abi> EmbeddedLinuxQtVersion::detectQtAbis() const QList<ProjectExplorer::Abi> EmbeddedLinuxQtVersion::detectQtAbis() const
{ {
return qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString())); return qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
} }
QString EmbeddedLinuxQtVersion::description() const QString EmbeddedLinuxQtVersion::description() const