From 75e23cc58f31638a7ea6cc104c45087782dc4b1a Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Mon, 9 Nov 2009 18:59:11 +0100 Subject: [PATCH] Fix -spec handling --- .../projectexplorer/debugginghelper.cpp | 6 +- src/plugins/projectexplorer/debugginghelper.h | 2 +- .../qt4projectmanager/projectloadwizard.cpp | 11 + src/plugins/qt4projectmanager/qmakestep.cpp | 2 +- src/plugins/qt4projectmanager/qt4project.cpp | 75 +++++- src/plugins/qt4projectmanager/qt4project.h | 1 + .../qt4projectconfigwidget.cpp | 12 +- .../qt4projectmanager/qtversionmanager.cpp | 237 +++++++++--------- .../qt4projectmanager/qtversionmanager.h | 7 +- 9 files changed, 213 insertions(+), 140 deletions(-) diff --git a/src/plugins/projectexplorer/debugginghelper.cpp b/src/plugins/projectexplorer/debugginghelper.cpp index 05c4aab59a5..de4c5abb095 100644 --- a/src/plugins/projectexplorer/debugginghelper.cpp +++ b/src/plugins/projectexplorer/debugginghelper.cpp @@ -132,7 +132,7 @@ QString DebuggingHelperLibrary::buildDebuggingHelperLibrary(const QString &qmake const QString directory = copyDebuggingHelperLibrary(qtInstallDataDir(qmakePath), &errorMessage); if (directory.isEmpty()) return errorMessage; - return buildDebuggingHelperLibrary(directory, make, qmakePath, env); + return buildDebuggingHelperLibrary(directory, make, qmakePath, QString::null, env); } // Copy helper source files to a target directory, replacing older files. @@ -188,7 +188,7 @@ QString DebuggingHelperLibrary::copyDebuggingHelperLibrary(const QString &qtInst return QString(); } -QString DebuggingHelperLibrary::buildDebuggingHelperLibrary(const QString &directory, const QString &makeCommand, const QString &qmakeCommand, const Environment &env) +QString DebuggingHelperLibrary::buildDebuggingHelperLibrary(const QString &directory, const QString &makeCommand, const QString &qmakeCommand, const QString &mkspec, const Environment &env) { QString output; const QChar newline = QLatin1Char('\n'); @@ -218,7 +218,7 @@ QString DebuggingHelperLibrary::buildDebuggingHelperLibrary(const QString &direc output += QCoreApplication::translate("ProjectExplorer::DebuggingHelperLibrary", "Running %1 ...\n").arg(qmakeCommand); QStringList makeArgs; - makeArgs << QLatin1String("-spec")<< QString(QLatin1String("default")) << QLatin1String("gdbmacros.pro"); + makeArgs << QLatin1String("-spec")<< (mkspec.isEmpty() ? QString(QLatin1String("default")) : mkspec) << QLatin1String("gdbmacros.pro"); proc.start(qmakeCommand, makeArgs); proc.waitForFinished(); diff --git a/src/plugins/projectexplorer/debugginghelper.h b/src/plugins/projectexplorer/debugginghelper.h index 0fda605a984..a9f05f53764 100644 --- a/src/plugins/projectexplorer/debugginghelper.h +++ b/src/plugins/projectexplorer/debugginghelper.h @@ -53,7 +53,7 @@ public: // Build the helpers and return the output log/errormessage. static QString buildDebuggingHelperLibrary(const QString &qmakePath, const QString &make, const Environment &env); - static QString buildDebuggingHelperLibrary(const QString &directory, const QString &makeCommand, const QString &qmakeCommand, const Environment &env); + static QString buildDebuggingHelperLibrary(const QString &directory, const QString &makeCommand, const QString &qmakeCommand, const QString &mkspec, const Environment &env); // Copy the source files to a target location and return the chosen target location. static QString copyDebuggingHelperLibrary(const QString &qtInstallData, QString *errorMessage); diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp index 8c29cdbd7ca..ffad329b3f8 100644 --- a/src/plugins/qt4projectmanager/projectloadwizard.cpp +++ b/src/plugins/qt4projectmanager/projectloadwizard.cpp @@ -67,6 +67,17 @@ ProjectLoadWizard::ProjectLoadWizard(Qt4Project *project, QWidget *parent, Qt::W QtVersionManager::scanMakeFile(directory, m_importVersion->defaultBuildConfig()); m_importBuildConfig = result.first; m_additionalArguments = Qt4Project::removeSpecFromArgumentList(result.second); + + QString parsedSpec = Qt4Project::extractSpecFromArgumentList(result.second, directory, m_importVersion); + QString versionSpec = m_importVersion->mkspec(); + + // Compare mkspecs and add to additional arguments + if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") { + // using the default spec, don't modify additional arguments + } else { + m_additionalArguments.prepend(parsedSpec); + m_additionalArguments.prepend("-spec"); + } } // So now we have the version and the configuration for that version diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index b4f2a0730d0..ba8b57f75dd 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -65,7 +65,7 @@ QStringList QMakeStep::arguments(const QString &buildConfiguration) arguments << "-r"; if (!additonalArguments.contains("-spec")) - arguments << "-spec" << "default"; + arguments << "-spec" << m_pro->qtVersion(bc)->mkspec(); #ifdef Q_OS_WIN ToolChain::ToolChainType type = m_pro->toolChainType(bc); diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index e75cb795ecf..2ab7642014d 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -1001,6 +1001,58 @@ ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(BuildConfigu return type; } +QString Qt4Project::extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version) +{ + int index = list.indexOf("-spec"); + if (index == -1) + index = list.indexOf("-platform"); + if (index == -1) + return QString(); + + ++index; + + if (index >= list.length()) + return QString(); + + QString baseMkspecDir = version->versionInfo().value("QMAKE_MKSPECS"); + if (baseMkspecDir.isEmpty()) + baseMkspecDir = version->versionInfo().value("QT_INSTALL_DATA") + "/mkspecs"; + + QString parsedSpec = QDir::cleanPath(list.at(index)); + // if the path is relative it can be + // relative to the working directory (as found in the Makefiles) + // or relatively to the mkspec directory + // if it is the former we need to get the canonical form + // for the other one we don't need to do anything + if (QFileInfo(parsedSpec).isRelative()) { + if(QFileInfo(directory + "/" + parsedSpec).exists()) { + parsedSpec = QDir::cleanPath(directory + "/" + parsedSpec); + } else { + parsedSpec = baseMkspecDir + "/" + parsedSpec; + } + } + + QFileInfo f2(parsedSpec); + while (f2.isSymLink()) { + parsedSpec = f2.symLinkTarget(); + f2.setFile(parsedSpec); + } + + if (parsedSpec.startsWith(baseMkspecDir)) { + parsedSpec = parsedSpec.mid(baseMkspecDir.length() + 1); + } else { + QString sourceMkSpecPath = version->sourcePath() + "/mkspecs"; + if (parsedSpec.startsWith(sourceMkSpecPath)) { + parsedSpec = sourceMkSpecPath.mid(sourceMkSpecPath.length() + 1); + } + } +#ifdef Q_OS_WIN + parsedSpec = parsedSpec.toLower(); +#endif + return parsedSpec; + +} + BuildConfigWidget *Qt4Project::createConfigWidget() { return new Qt4ProjectConfigWidget(this); @@ -1235,16 +1287,31 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(BuildConfiguration *confi // now compare arguments lists // we have to compare without the spec/platform cmd argument // and compare that on its own + QString actualSpec = extractSpecFromArgumentList(qs->value(configuration->name(), "qmakeArgs").toStringList(), workingDirectory, version); + if (actualSpec.isEmpty()) { + // Easy one the user has choosen not to override the settings + actualSpec = version->mkspec(); + } + QString parsedSpec = extractSpecFromArgumentList(result.second, workingDirectory, version); QStringList actualArgs = removeSpecFromArgumentList(qs->value(configuration->name(), "qmakeArgs").toStringList()); QStringList parsedArgs = removeSpecFromArgumentList(result.second); - if (debug) { + +// if (debug) { qDebug()<<"Actual args:"<<actualArgs; qDebug()<<"Parsed args:"<<parsedArgs; + qDebug()<<"Actual spec:"<<actualSpec; + qDebug()<<"Parsed spec:"<<parsedSpec; +// } + + if (actualArgs == parsedArgs) { + // Specs match exactly + if (actualSpec == parsedSpec) + return true; + // Actual spec is the default one + if (actualSpec == version->mkspec() && (parsedSpec == "default" || parsedSpec.isEmpty())) + return true; } - - if (actualArgs == parsedArgs) - return true; } } } diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 0853723192a..aac7ac8cbab 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -236,6 +236,7 @@ public: bool compareBuildConfigurationToImportFrom(ProjectExplorer::BuildConfiguration *configuration, const QString &workingDirectory); static QStringList removeSpecFromArgumentList(const QStringList &old); + static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version); signals: void targetInformationChanged(); void qtVersionChanged(ProjectExplorer::BuildConfiguration *); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index cfe21ab420b..aa3cd231ed3 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -223,6 +223,8 @@ void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked) else bc->setValue("buildDirectory", QVariant(QString::null)); updateDetails(); + m_pro->invalidateCachedTargetInformation(); + updateImportLabel(); } void Qt4ProjectConfigWidget::updateImportLabel() @@ -286,7 +288,15 @@ void Qt4ProjectConfigWidget::importLabelClicked() QPair<QtVersion::QmakeBuildConfig, QStringList> result = QtVersionManager::scanMakeFile(directory, version->defaultBuildConfig()); QtVersion::QmakeBuildConfig qmakeBuildConfig = result.first; - QStringList additionalArguments = result.second; + QStringList additionalArguments = Qt4Project::removeSpecFromArgumentList(result.second); + QString parsedSpec = Qt4Project::extractSpecFromArgumentList(result.second, directory, version); + QString versionSpec = version->mkspecPath(); + if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") { + // using the default spec, don't modify additional arguments + } else { + additionalArguments.prepend(parsedSpec); + additionalArguments.prepend("-spec"); + } // So we got all the information now apply it... m_pro->setQtVersion(bc, version->uniqueId()); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index 6f202422e1a..b11b7ee648e 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -425,7 +425,6 @@ QtVersion::QtVersion(const QString &name, const QString &qmakeCommand, int id, m_isAutodetected(isAutodetected), m_autodetectionSource(autodetectionSource), m_hasDebuggingHelper(false), - m_mkspecUpToDate(false), m_toolChainUpToDate(false), m_versionInfoUpToDate(false), m_notInstalled(false), @@ -448,7 +447,6 @@ QtVersion::QtVersion(const QString &name, const QString &qmakeCommand, m_isAutodetected(isAutodetected), m_autodetectionSource(autodetectionSource), m_hasDebuggingHelper(false), - m_mkspecUpToDate(false), m_toolChainUpToDate(false), m_versionInfoUpToDate(false), m_notInstalled(false), @@ -467,7 +465,6 @@ QtVersion::QtVersion(const QString &qmakeCommand, bool isAutodetected, const QSt : m_isAutodetected(isAutodetected), m_autodetectionSource(autodetectionSource), m_hasDebuggingHelper(false), - m_mkspecUpToDate(false), m_toolChainUpToDate(false), m_versionInfoUpToDate(false), m_notInstalled(false), @@ -487,7 +484,6 @@ QtVersion::QtVersion() m_id(-1), m_isAutodetected(false), m_hasDebuggingHelper(false), - m_mkspecUpToDate(false), m_toolChainUpToDate(false), m_versionInfoUpToDate(false), m_notInstalled(false), @@ -519,7 +515,7 @@ QString QtVersion::toHtml() const << "</b></td><td>" << mkspec() << "</td></tr>"; str << "<tr><td><b>" << QtVersionManager::tr("qmake:") << "</b></td><td>" << m_qmakeCommand << "</td></tr>"; - updateVersionInfo(); + updateToolChainAndMkspec(); if (m_defaultConfigIsDebug || m_defaultConfigIsDebugAndRelease) { str << "<tr><td><b>" << QtVersionManager::tr("Default:") << "</b></td><td>" << (m_defaultConfigIsDebug ? "debug" : "release"); @@ -559,13 +555,13 @@ QString QtVersion::sourcePath() const QString QtVersion::mkspec() const { - updateMkSpec(); + updateToolChainAndMkspec(); return m_mkspec; } QString QtVersion::mkspecPath() const { - updateMkSpec(); + updateToolChainAndMkspec(); return m_mkspecFullPath; } @@ -592,7 +588,6 @@ void QtVersion::setQMakeCommand(const QString& qmakeCommand) m_qmakeCommand = m_qmakeCommand.toLower(); #endif m_designerCommand = m_linguistCommand = m_uicCommand = QString::null; - m_mkspecUpToDate = false; m_toolChainUpToDate = false; // TODO do i need to optimize this? m_versionInfoUpToDate = false; @@ -629,6 +624,9 @@ void QtVersion::updateSourcePath() } } m_sourcePath = QDir::cleanPath(m_sourcePath); +#ifdef Q_OS_WIN + m_sourcePath = m_sourcePath.toLower(); +#endif } // Returns the version that was used to build the project in that directory @@ -835,7 +833,6 @@ void QtVersionManager::parseParts(const QStringList &parts, QList<QMakeAssignmen #endif } - /// This function extracts all the CONFIG+=debug, CONFIG+=release QtVersion::QmakeBuildConfig QtVersionManager::qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments, QtVersion::QmakeBuildConfig defaultBuildConfig) { @@ -950,29 +947,6 @@ void QtVersion::updateVersionInfo() const if (fi.exists()) m_hasDemos = true; } - - // Parse qconfigpri - QString baseDir = m_versionInfo.value("QT_INSTALL_DATA"); - QFile qconfigpri(baseDir + QLatin1String("/mkspecs/qconfig.pri")); - if (qconfigpri.exists()) { - qconfigpri.open(QIODevice::ReadOnly | QIODevice::Text); - QTextStream stream(&qconfigpri); - while (!stream.atEnd()) { - QString line = stream.readLine().trimmed(); - if (line.startsWith(QLatin1String("CONFIG"))) { - m_defaultConfigIsDebugAndRelease = false; - QStringList values = line.split(QLatin1Char('=')).at(1).trimmed().split(" "); - foreach(const QString &value, values) { - if (value == "debug") - m_defaultConfigIsDebug = true; - else if (value == "release") - m_defaultConfigIsDebug = false; - else if (value == "build_all") - m_defaultConfigIsDebugAndRelease = true; - } - } - } - } } m_versionInfoUpToDate = true; } @@ -983,86 +957,6 @@ bool QtVersion::isInstalled() const return !m_notInstalled; } -void QtVersion::updateMkSpec() const -{ - if (m_mkspecUpToDate) - return; - //qDebug()<<"Finding mkspec for"<<path(); - - QString mkspec = "default"; - // no .qmake.cache so look at the default mkspec - m_mkspecFullPath = versionInfo().value("QMAKE_MKSPECS"); - if (m_mkspecFullPath.isEmpty()) - m_mkspecFullPath = versionInfo().value("QT_INSTALL_DATA") + "/mkspecs/default"; - else - m_mkspecFullPath = m_mkspecFullPath + "/default"; -// qDebug() << "default mkspec is located at" << m_mkspecFullPath; -#ifdef Q_OS_WIN - QFile f2(m_mkspecFullPath + "/qmake.conf"); - if (f2.exists() && f2.open(QIODevice::ReadOnly)) { - while (!f2.atEnd()) { - QByteArray line = f2.readLine(); - if (line.startsWith("QMAKESPEC_ORIGINAL")) { - const QList<QByteArray> &temp = line.split('='); - if (temp.size() == 2) { - mkspec = temp.at(1).trimmed(); - } - break; - } - } - f2.close(); - } -#elif defined(Q_OS_MAC) - QFile f2(m_mkspecFullPath + "/qmake.conf"); - if (f2.exists() && f2.open(QIODevice::ReadOnly)) { - while (!f2.atEnd()) { - QByteArray line = f2.readLine(); - if (line.startsWith("MAKEFILE_GENERATOR")) { - const QList<QByteArray> &temp = line.split('='); - if (temp.size() == 2) { - const QByteArray &value = temp.at(1); - if (value.contains("XCODE")) { - // we don't want to generate xcode projects... -// qDebug() << "default mkspec is xcode, falling back to g++"; - mkspec = "macx-g++"; - } else { - //resolve mkspec link - QFileInfo f3(m_mkspecFullPath); - if (f3.isSymLink()) { - mkspec = f3.symLinkTarget(); - } - } - } - break; - } - } - f2.close(); - } -#else - QFileInfo f2(m_mkspecFullPath); - if (f2.isSymLink()) { - mkspec = f2.symLinkTarget(); - } -#endif - - QString mkspecdir = versionInfo().value("QMAKE_MKSPECS"); - if (mkspecdir.isEmpty()) - mkspecdir = versionInfo().value("QT_INSTALL_DATA") + "/mkspecs"; - - if (mkspec.startsWith(mkspecdir)) { - mkspec = mkspec.mid(mkspecdir.length() + 1); - qDebug() << "Setting mkspec to"<<mkspec; - } else { - int index = qMax(mkspec.lastIndexOf('/'), mkspec.lastIndexOf('\\')); - if (index >= 0) - mkspec = mkspec.mid(index+1).trimmed(); - } - - m_mkspec = mkspec; - m_mkspecUpToDate = true; -// qDebug()<<"mkspec for "<<versionInfo().value("QT_INSTALL_DATA")<<" is "<<mkspec; -} - QString QtVersion::findQtBinary(const QStringList &possibleCommands) const { const QString qtdirbin = versionInfo().value(QLatin1String("QT_INSTALL_BINS")) + QLatin1Char('/'); @@ -1128,7 +1022,7 @@ QString QtVersion::linguistCommand() const QList<QSharedPointer<ProjectExplorer::ToolChain> > QtVersion::toolChains() const { - updateToolChain(); + updateToolChainAndMkspec(); return m_toolChains; } @@ -1157,24 +1051,105 @@ ProjectExplorer::ToolChain::ToolChainType QtVersion::defaultToolchainType() cons } // if none, then it's INVALID everywhere this function is called -void QtVersion::updateToolChain() const +void QtVersion::updateToolChainAndMkspec() const { if (m_toolChainUpToDate) return; + if (!isValid()) + return; + m_toolChains.clear(); - QString mkspecPath = versionInfo().value("QMAKE_MKSPECS"); - if (mkspecPath.isEmpty()) - mkspecPath = versionInfo().value("QT_INSTALL_DATA") + "/mkspecs/default"; - else - mkspecPath = mkspecPath + "/default"; + qDebug()<<"Finding mkspec for"<<qmakeCommand(); + + // no .qmake.cache so look at the default mkspec + + QString baseMkspecDir = versionInfo().value("QMAKE_MKSPECS"); + if (baseMkspecDir.isEmpty()) + baseMkspecDir = versionInfo().value("QT_INSTALL_DATA") + "/mkspecs"; + + QString mkspecFullPath = baseMkspecDir + "/default"; + + // qDebug() << "default mkspec is located at" << mkspecFullPath; + +#ifdef Q_OS_WIN + QFile f2(mkspecFullPath + "/qmake.conf"); + if (f2.exists() && f2.open(QIODevice::ReadOnly)) { + while (!f2.atEnd()) { + QByteArray line = f2.readLine(); + if (line.startsWith("QMAKESPEC_ORIGINAL")) { + const QList<QByteArray> &temp = line.split('='); + if (temp.size() == 2) { + mkspecFullPath = temp.at(1).trimmed(); + } + break; + } + } + f2.close(); + } +#elif defined(Q_OS_MAC) + QFile f2(mkspecFullPath + "/qmake.conf"); + if (f2.exists() && f2.open(QIODevice::ReadOnly)) { + while (!f2.atEnd()) { + QByteArray line = f2.readLine(); + if (line.startsWith("MAKEFILE_GENERATOR")) { + const QList<QByteArray> &temp = line.split('='); + if (temp.size() == 2) { + const QByteArray &value = temp.at(1); + if (value.contains("XCODE")) { + // we don't want to generate xcode projects... +// qDebug() << "default mkspec is xcode, falling back to g++"; + mkspecFullPath = baseMkspecDir + "/macx-g++"; + } + //resolve mkspec link + QFileInfo f3(mkspecFullPath); + while (f3.isSymLink()) { + mkspecFullPath = f3.symLinkTarget(); + f3.setFile(mkspecFullPath); + } + } + break; + } + } + f2.close(); + } +#else + QFileInfo f2(mkspecFullPath); + while (f2.isSymLink()) { + mkspecFullPath = f2.symLinkTarget(); + f2.setFile(mkspecFullPath); + } +#endif + +#ifdef Q_OS_WIN + m_mkspecFullPath = m_mkspecFullPath.toLower() +#endif + + m_mkspecFullPath = mkspecFullPath; + QString mkspec = m_mkspecFullPath; + + if (mkspec.startsWith(baseMkspecDir)) { + mkspec = mkspec.mid(baseMkspecDir.length() + 1); + qDebug() << "Setting mkspec to"<<mkspec; + } else { + QString sourceMkSpecPath = sourcePath() + "/mkspecs"; + if (mkspec.startsWith(sourceMkSpecPath)) { + mkspec = mkspec.mid(sourceMkSpecPath.length() + 1); + } else { + // Do nothing + } + } + + m_mkspec = mkspec; + + qDebug()<<"mkspec for "<<qmakeCommand()<<" is "<<m_mkspec<<m_mkspecFullPath; ProFileReader *reader = new ProFileReader(); reader->setQtVersion(this); reader->setCumulative(false); reader->setParsePreAndPostFiles(false); - reader->readProFile(mkspecPath + "/qmake.conf"); + reader->readProFile(m_mkspecFullPath + "/qmake.conf"); QString qmakeCXX = reader->value("QMAKE_CXX"); QString makefileGenerator = reader->value("MAKEFILE_GENERATOR"); QString ce_sdk = reader->values("CE_SDK").join(QLatin1String(" ")); @@ -1225,10 +1200,21 @@ void QtVersion::updateToolChain() const } if (m_toolChains.isEmpty()) { - qDebug()<<"Could not create ToolChain for"<<mkspecPath<<qmakeCXX; + qDebug()<<"Could not create ToolChain for"<<m_mkspecFullPath<<qmakeCXX; qDebug()<<"Qt Creator doesn't know about the system includes, nor the systems defines."; } + QStringList configValues = reader->values("CONFIG"); + m_defaultConfigIsDebugAndRelease = false; + foreach(const QString &value, configValues) { + if (value == "debug") + m_defaultConfigIsDebug = true; + else if (value == "release") + m_defaultConfigIsDebug = false; + else if (value == "build_all") + m_defaultConfigIsDebugAndRelease = true; + } + delete reader; m_toolChainUpToDate = true; } @@ -1305,13 +1291,14 @@ int QtVersion::getUniqueId() bool QtVersion::isValid() const { - return (!(m_id == -1 || m_qmakeCommand == QString::null - || m_name == QString::null) && !m_notInstalled); + updateVersionInfo(); + return (!(m_id == -1 || qmakeCommand() == QString::null + || name() == QString::null) && !m_notInstalled); } QtVersion::QmakeBuildConfig QtVersion::defaultBuildConfig() const { - updateVersionInfo(); + updateToolChainAndMkspec(); QtVersion::QmakeBuildConfig result = QtVersion::QmakeBuildConfig(0); if (m_defaultConfigIsDebugAndRelease) result = QtVersion::BuildAll; @@ -1415,7 +1402,7 @@ QString QtVersion::buildDebuggingHelperLibrary() QString output; QString directory = DebuggingHelperLibrary::copyDebuggingHelperLibrary(qtInstallData, &output); if (!directory.isEmpty()) - output += DebuggingHelperLibrary::buildDebuggingHelperLibrary(directory, tc->makeCommand(), qmakeCommand(), env); + output += DebuggingHelperLibrary::buildDebuggingHelperLibrary(directory, tc->makeCommand(), qmakeCommand(), mkspec(), env); m_hasDebuggingHelper = !debuggingHelperLibrary().isEmpty(); return output; } diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index d0dde249231..07e97d3f289 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -142,10 +142,9 @@ private: static int getUniqueId(); // Also used by QtOptionsPageWidget void updateSourcePath(); - void updateMkSpec() const; void updateVersionInfo() const; QString findQtBinary(const QStringList &possibleName) const; - void updateToolChain() const; + void updateToolChainAndMkspec() const; QString m_name; QString m_sourcePath; QString m_mingwDirectory; @@ -160,11 +159,9 @@ private: QString m_gcceDirectory; #endif - mutable bool m_mkspecUpToDate; + mutable bool m_toolChainUpToDate; mutable QString m_mkspec; // updated lazily mutable QString m_mkspecFullPath; - - mutable bool m_toolChainUpToDate; mutable QList<QSharedPointer<ProjectExplorer::ToolChain> > m_toolChains; mutable bool m_versionInfoUpToDate; -- GitLab