QPair<ProjectExplorer::Task::TaskType, QString> Qt4TargetSetupWidget::findIssues(const BuildConfigurationInfo &info) { if (m_proFilePath.isEmpty()) return qMakePair(ProjectExplorer::Task::Unknown, QString()); QString buildDir = info.directory; QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(m_profile); if (!version) return qMakePair(ProjectExplorer::Task::Unknown, QString()); QList<ProjectExplorer::Task> issues = version->reportIssues(m_proFilePath, buildDir); QString text; ProjectExplorer::Task::TaskType highestType = ProjectExplorer::Task::Unknown; foreach (const ProjectExplorer::Task &t, issues) { if (!text.isEmpty()) text.append(QLatin1String("<br>")); // set severity: QString severity; if (t.type == ProjectExplorer::Task::Error) { highestType = ProjectExplorer::Task::Error; severity = tr("<b>Error:</b> ", "Severity is Task::Error"); } else if (t.type == ProjectExplorer::Task::Warning) { if (highestType == ProjectExplorer::Task::Unknown) highestType = ProjectExplorer::Task::Warning; severity = tr("<b>Warning:</b> ", "Severity is Task::Warning"); } text.append(severity + t.description); } if (!text.isEmpty()) text = QLatin1String("<nobr>") + text; return qMakePair(highestType, text); }
void QmakeProjectConfigWidget::updateProblemLabel() { m_ui->shadowBuildDirEdit->triggerChanged(); ProjectExplorer::Kit *k = m_buildConfiguration->target()->kit(); const QString proFileName = m_buildConfiguration->target()->project()->projectFilePath().toString(); // Check for Qt version: QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); if (!version) { setProblemLabel(tr("This kit cannot build this project since it does not define a Qt version.")); return; } QmakeProject *p = static_cast<QmakeProject *>(m_buildConfiguration->target()->project()); if (p->rootProjectNode()->parseInProgress() || !p->rootProjectNode()->validParse()) { setProblemLabel(QString()); return; } bool targetMismatch = false; bool incompatibleBuild = false; bool allGood = false; // we only show if we actually have a qmake and makestep QString errorString; if (m_buildConfiguration->qmakeStep() && m_buildConfiguration->makeStep()) { QString makefile = m_buildConfiguration->buildDirectory().toString() + QLatin1Char('/'); if (m_buildConfiguration->makefile().isEmpty()) makefile.append(QLatin1String("Makefile")); else makefile.append(m_buildConfiguration->makefile()); switch (m_buildConfiguration->compareToImportFrom(makefile, &errorString)) { case QmakeBuildConfiguration::MakefileMatches: allGood = true; break; case QmakeBuildConfiguration::MakefileMissing: allGood = true; break; case QmakeBuildConfiguration::MakefileIncompatible: incompatibleBuild = true; break; case QmakeBuildConfiguration::MakefileForWrongProject: targetMismatch = true; break; } } if (allGood) { QString buildDirectory = m_buildConfiguration->target()->project()->projectDirectory().toString(); if (m_buildConfiguration->isShadowBuild()) buildDirectory = m_buildConfiguration->buildDirectory().toString(); QList<ProjectExplorer::Task> issues; issues = version->reportIssues(proFileName, buildDirectory); Utils::sort(issues); if (!issues.isEmpty()) { QString text = QLatin1String("<nobr>"); foreach (const ProjectExplorer::Task &task, issues) { QString type; switch (task.type) { case ProjectExplorer::Task::Error: type = tr("Error:"); type += QLatin1Char(' '); break; case ProjectExplorer::Task::Warning: type = tr("Warning:"); type += QLatin1Char(' '); break; case ProjectExplorer::Task::Unknown: default: break; } if (!text.endsWith(QLatin1String("br>"))) text.append(QLatin1String("<br>")); text.append(type + task.description); } setProblemLabel(text); return; }
bool QMakeStep::init() { Qt4BuildConfiguration *qt4bc = qt4BuildConfiguration(); const QtSupport::BaseQtVersion *qtVersion = qt4bc->qtVersion(); if (!qtVersion) return false; QString args = allArguments(); QString workingDirectory; if (qt4bc->subNodeBuild()) workingDirectory = qt4bc->subNodeBuild()->buildDir(); else workingDirectory = qt4bc->buildDirectory(); QString program = qtVersion->qmakeCommand(); // Check whether we need to run qmake m_needToRunQMake = true; QString makefile = workingDirectory; if (qt4bc->subNodeBuild()) { if (!qt4bc->subNodeBuild()->makefile().isEmpty()) { makefile.append(qt4bc->subNodeBuild()->makefile()); } else { makefile.append("/Makefile"); } } else if (!qt4bc->makefile().isEmpty()) { makefile.append("/"); makefile.append(qt4bc->makefile()); } else { makefile.append("/Makefile"); } if (QFileInfo(makefile).exists()) { QString qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile); if (qtVersion->qmakeCommand() == qmakePath) { m_needToRunQMake = !qt4bc->compareToImportFrom(makefile); } } if (m_forced) { m_forced = false; m_needToRunQMake = true; } setEnabled(m_needToRunQMake); ProcessParameters *pp = processParameters(); pp->setMacroExpander(qt4bc->macroExpander()); pp->setWorkingDirectory(workingDirectory); pp->setCommand(program); pp->setArguments(args); pp->setEnvironment(qt4bc->environment()); setOutputParser(new QMakeParser); Qt4ProFileNode *node = qt4bc->qt4Target()->qt4Project()->rootProjectNode(); if (qt4bc->subNodeBuild()) node = qt4bc->subNodeBuild(); QString proFile = node->path(); QtSupport::BaseQtVersion *version = qt4BuildConfiguration()->qtVersion(); m_tasks = version->reportIssues(proFile, workingDirectory); foreach (Qt4BaseTargetFactory *factory, Qt4BaseTargetFactory::qt4BaseTargetFactoriesForIds(version->supportedTargetIds().toList())) m_tasks.append(factory->reportIssues(proFile)); qSort(m_tasks); m_scriptTemplate = node->projectType() == ScriptTemplate; return AbstractProcessStep::init(); }
void Qt4ProjectConfigWidget::updateProblemLabel() { ProjectExplorer::Kit *k = m_buildConfiguration->target()->kit(); const QString proFileName = m_buildConfiguration->target()->project()->document()->fileName(); // Check for Qt version: QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); if (!version) { setProblemLabel(tr("This kit cannot build this project since it does not define a Qt version.")); return; } bool targetMismatch = false; bool incompatibleBuild = false; bool allGood = false; // we only show if we actually have a qmake and makestep if (m_buildConfiguration->qmakeStep() && m_buildConfiguration->makeStep()) { QString makefile = m_buildConfiguration->buildDirectory() + QLatin1Char('/'); if (m_buildConfiguration->makefile().isEmpty()) makefile.append(QLatin1String("Makefile")); else makefile.append(m_buildConfiguration->makefile()); switch (m_buildConfiguration->compareToImportFrom(makefile)) { case Qt4BuildConfiguration::MakefileMatches: allGood = true; break; case Qt4BuildConfiguration::MakefileMissing: allGood = true; break; case Qt4BuildConfiguration::MakefileIncompatible: incompatibleBuild = true; break; case Qt4BuildConfiguration::MakefileForWrongProject: targetMismatch = true; break; } } QString shadowBuildWarning; if (!version->supportsShadowBuilds() && m_buildConfiguration->shadowBuild()) { shadowBuildWarning = tr("The Qt version %1 does not support shadow builds, building might fail.") .arg(version->displayName()) + QLatin1String("<br>"); } if (allGood) { QString buildDirectory = m_buildConfiguration->target()->project()->projectDirectory();; if (m_buildConfiguration->shadowBuild()) buildDirectory = m_buildConfiguration->buildDirectory(); QList<ProjectExplorer::Task> issues; issues = version->reportIssues(proFileName, buildDirectory); qSort(issues); if (!issues.isEmpty() || !shadowBuildWarning.isEmpty()) { QString text = QLatin1String("<nobr>") + shadowBuildWarning; foreach (const ProjectExplorer::Task &task, issues) { QString type; switch (task.type) { case ProjectExplorer::Task::Error: type = tr("Error:"); type += QLatin1Char(' '); break; case ProjectExplorer::Task::Warning: type = tr("Warning:"); type += QLatin1Char(' '); break; case ProjectExplorer::Task::Unknown: default: break; } if (!text.endsWith(QLatin1String("br>"))) text.append(QLatin1String("<br>")); text.append(type + task.description); } setProblemLabel(text); return; }