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> abis = qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString()));
QList<ProjectExplorer::Abi> abis = qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
for (int i = 0; i < abis.count(); ++i) {
abis[i] = Abi(abis.at(i).architecture(),
abis.at(i).os(),

View File

@@ -90,7 +90,7 @@ QString IosQtVersion::invalidReason() 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) {
abis[i] = Abi(abis.at(i).architecture(),
abis.at(i).os(),

View File

@@ -90,7 +90,7 @@ void QnxAbstractQtVersion::fromMap(const QVariantMap &map)
QList<ProjectExplorer::Abi> QnxAbstractQtVersion::detectQtAbis() const
{
ensureMkSpecParsed();
return qtAbisFromLibrary(qtCorePath(versionInfo(), qtVersionString()));
return qtAbisFromLibrary(qtCorePaths(versionInfo(), qtVersionString()));
}
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");
}
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;
dirs << qmakeProperty(versionInfo, "QT_INSTALL_LIBS")
<< qmakeProperty(versionInfo, "QT_INSTALL_BINS");
QFileInfoList staticLibs;
QList<FileName> staticLibs;
QList<FileName> dynamicLibs;
foreach (const QString &dir, dirs) {
if (dir.isEmpty())
continue;
@@ -1536,33 +1537,35 @@ FileName BaseQtVersion::qtCorePath(const QHash<QString,QString> &versionInfo, co
&& file.endsWith(QLatin1String(".framework"))) {
// handle Framework
FileName lib(info);
lib.appendPath(file.left(file.lastIndexOf(QLatin1Char('.'))));
return lib;
}
if (info.isReadable()) {
dynamicLibs.append(lib.appendPath(file.left(file.lastIndexOf(QLatin1Char('.')))));
} else if (info.isReadable()) {
if (file.startsWith(QLatin1String("libQtCore"))
|| file.startsWith(QLatin1String("libQt5Core"))
|| file.startsWith(QLatin1String("QtCore"))
|| file.startsWith(QLatin1String("Qt5Core"))) {
// Only handle static libs if we can not find dynamic ones:
if (file.endsWith(QLatin1String(".a")) || file.endsWith(QLatin1String(".lib")))
staticLibs.append(info);
staticLibs.append(FileName(info));
else if (file.endsWith(QLatin1String(".dll"))
|| file.endsWith(QString::fromLatin1(".so.") + versionString)
|| file.endsWith(QLatin1String(".so"))
|| file.endsWith(QLatin1Char('.') + versionString + QLatin1String(".dylib")))
return FileName(info);
dynamicLibs.append(FileName(info));
}
}
}
}
// Return path to first static library found:
if (!staticLibs.isEmpty())
return FileName(staticLibs.at(0));
return FileName();
// Only handle static libs if we can not find dynamic ones:
if (dynamicLibs.isEmpty())
return staticLibs;
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;
// 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<ProjectExplorer::Abi> qtAbisFromLibrary(const Utils::FileName &coreLibrary);
static QList<Utils::FileName> qtCorePaths(const QHash<QString,QString> &versionInfo,
const QString &versionString);
static QList<ProjectExplorer::Abi> qtAbisFromLibrary(const QList<Utils::FileName> &coreLibraries);
void ensureMkSpecParsed() const;
virtual void parseMkSpec(ProFileEvaluator *) const;

View File

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

View File

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

View File

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