bool RemoteLinuxRunConfiguration::fromMap(const QVariantMap &map) { if (!RunConfiguration::fromMap(map)) return false; d->arguments = map.value(QLatin1String(ArgumentsKey)).toString(); const QDir dir = QDir(target()->project()->projectDirectory()); d->proFilePath = QDir::cleanPath(dir.filePath(map.value(QLatin1String(ProFileKey)).toString())); d->userEnvironmentChanges = EnvironmentItem::fromStringList(map.value(QLatin1String(UserEnvironmentChangesKey)) .toStringList()); d->baseEnvironmentType = static_cast<BaseEnvironmentType>(map.value(QLatin1String(BaseEnvironmentBaseKey), RemoteBaseEnvironment).toInt()); d->useAlternateRemoteExecutable = map.value(QLatin1String(UseAlternateExeKey), false).toBool(); d->alternateRemoteExecutable = map.value(QLatin1String(AlternateExeKey)).toString(); d->workingDirectory = map.value(QLatin1String(WorkingDirectoryKey)).toString(); Qt4Project *project = static_cast<Qt4Project *>(target()->project()); d->validParse = project->validParse(d->proFilePath); d->parseInProgress = project->parseInProgress(d->proFilePath); setDefaultDisplayName(defaultDisplayName()); return true; }
ProjectExplorer::Environment Qt4RunConfiguration::environment() const { Qt4Project *pro = qobject_cast<Qt4Project *>(project()); Q_ASSERT(pro); QString config = pro->activeBuildConfiguration(); ProjectExplorer::Environment env = pro->environment(pro->activeBuildConfiguration()); if (m_isUsingDyldImageSuffix) { env.set("DYLD_IMAGE_SUFFIX", "_debug"); } return env; }
bool S60CreatePackageStep::init() { Qt4Project *pro = qobject_cast<Qt4Project *>(project()); QList<Qt4ProFileNode *> nodes = pro->allProFiles(); SymbianQtVersion *sqv = dynamic_cast<SymbianQtVersion *>(qt4BuildConfiguration()->qtVersion()); if (!sqv) return false; m_isBuildWithSymbianSbsV2 = sqv->isBuildWithSymbianSbsV2(); m_workingDirectories.clear(); QStringList projectCapabilities; foreach (Qt4ProFileNode *node, nodes) { projectCapabilities += node->symbianCapabilities(); m_workingDirectories << node->buildDir(); }
bool RemoteLinuxRunConfiguration::isEnabled() const { if (d->parseInProgress) { d->disabledReason = tr("The .pro file '%1' is being parsed.") .arg(QFileInfo(d->proFilePath).fileName()); return false; } if (!d->validParse) { Qt4Project *project = static_cast<Qt4Project *>(target()->project()); d->disabledReason = project->disabledReasonForRunConfiguration(d->proFilePath); return false; } if (!activeBuildConfiguration()) { d->disabledReason = tr("No active build configuration."); return false; } if (remoteExecutableFilePath().isEmpty()) { d->disabledReason = tr("Don't know what to run."); return false; } d->disabledReason.clear(); return true; }
void MakeStepConfigWidget::updateDetails() { Qt4Project *pro = static_cast<Qt4Project *>(m_makeStep->project()); ProjectExplorer::BuildConfiguration *bc = pro->buildConfiguration(m_buildConfiguration); QString workingDirectory = pro->buildDirectory(bc); QString makeCmd = pro->makeCommand(bc); if (!m_makeStep->value(m_buildConfiguration, "makeCmd").toString().isEmpty()) makeCmd = m_makeStep->value(m_buildConfiguration, "makeCmd").toString(); if (!QFileInfo(makeCmd).isAbsolute()) { Environment environment = pro->environment(bc); // Try to detect command in environment QString tmp = environment.searchInPath(makeCmd); if (tmp == QString::null) { m_summaryText = tr("<b>Make Step:</b> %1 not found in the environment.").arg(makeCmd); emit updateSummary(); return; } makeCmd = tmp; } // -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the // absolute file path // FIXME doing this without the user having a way to override this is rather bad // so we only do it for unix and if the user didn't override the make command // but for now this is the least invasive change QStringList args = m_makeStep->value(m_buildConfiguration, "makeargs").toStringList(); ProjectExplorer::ToolChain::ToolChainType t = ProjectExplorer::ToolChain::UNKNOWN; ProjectExplorer::ToolChain *toolChain = pro->toolChain(bc); if (toolChain) t = toolChain->type(); if (t != ProjectExplorer::ToolChain::MSVC && t != ProjectExplorer::ToolChain::WINCE) { if (m_makeStep->value(m_buildConfiguration, "makeCmd").toString().isEmpty()) args << "-w"; } m_summaryText = tr("<b>Make:</b> %1 %2 in %3").arg(QFileInfo(makeCmd).fileName(), args.join(" "), QDir::toNativeSeparators(workingDirectory)); emit updateSummary(); }
void Qt4ProjectConfigWidget::updateProblemLabel() { m_ui->shadowBuildDirEdit->triggerChanged(); 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; } Qt4Project *p = static_cast<Qt4Project *>(m_buildConfiguration->target()->project()); if (p->rootQt4ProjectNode()->parseInProgress() || !p->rootQt4ProjectNode()->validParse()) { setProblemLabel(QString()); 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; }
QString Qt4RunConfiguration::dumperLibrary() const { Qt4Project *pro = qobject_cast<Qt4Project *>(project()); QtVersion *version = pro->qtVersion(pro->activeBuildConfiguration()); return version->dumperLibrary(); }
void Qt4RunConfiguration::updateTarget() { if (m_cachedTargetInformationValid) return; //qDebug()<<"updateTarget"; Qt4Project *pro = static_cast<Qt4Project *>(project()); ProFileReader *reader = pro->createProFileReader(); reader->setCumulative(false); reader->setQtVersion(pro->qtVersion(pro->activeBuildConfiguration())); // Find out what flags we pass on to qmake, this code is duplicated in the qmake step QtVersion::QmakeBuildConfig defaultBuildConfiguration = pro->qtVersion(pro->activeBuildConfiguration())->defaultBuildConfig(); QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(pro->qmakeStep()->value(pro->activeBuildConfiguration(), "buildConfiguration").toInt()); QStringList addedUserConfigArguments; QStringList removedUserConfigArguments; if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) removedUserConfigArguments << "debug_and_release"; if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll)) addedUserConfigArguments << "debug_and_release"; if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild)) addedUserConfigArguments << "release"; if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild)) addedUserConfigArguments << "debug"; reader->setUserConfigCmdArgs(addedUserConfigArguments, removedUserConfigArguments); QHash<QString, QStringList>::const_iterator it; if (!reader->readProFile(m_proFilePath)) { delete reader; Core::ICore::instance()->messageManager()->printToOutputPane(QString("Could not parse %1. The Qt4 run configuration %2 can not be started.").arg(m_proFilePath).arg(name())); return; } // Extract data QDir baseProjectDirectory = QFileInfo(project()->file()->fileName()).absoluteDir(); QString relSubDir = baseProjectDirectory.relativeFilePath(QFileInfo(m_proFilePath).path()); QDir baseBuildDirectory = project()->buildDirectory(project()->activeBuildConfiguration()); QString baseDir = baseBuildDirectory.absoluteFilePath(relSubDir); //qDebug()<<relSubDir<<baseDir; // Working Directory if (reader->contains("DESTDIR")) { //qDebug()<<"reader contains destdir:"<<reader->value("DESTDIR"); m_workingDir = reader->value("DESTDIR"); if (QDir::isRelativePath(m_workingDir)) { m_workingDir = baseDir + QLatin1Char('/') + m_workingDir; //qDebug()<<"was relative and expanded to"<<m_workingDir; } } else { //qDebug()<<"reader didn't contain DESTDIR, setting to "<<baseDir; m_workingDir = baseDir; #if defined(Q_OS_WIN) QString qmakeBuildConfig = "release"; if (projectBuildConfiguration & QtVersion::DebugBuild) qmakeBuildConfig = "debug"; if (!reader->contains("DESTDIR")) m_workingDir += QLatin1Char('/') + qmakeBuildConfig; #endif } #if defined (Q_OS_MAC) if (reader->values("CONFIG").contains("app_bundle")) { m_workingDir += QLatin1Char('/') + reader->value("TARGET") + QLatin1String(".app/Contents/MacOS"); } #endif m_workingDir = QDir::cleanPath(m_workingDir); m_executable = QDir::cleanPath(m_workingDir + QLatin1Char('/') + reader->value("TARGET")); //qDebug()<<"##### updateTarget sets:"<<m_workingDir<<m_executable; #if defined (Q_OS_WIN) m_executable += QLatin1String(".exe"); #endif delete reader; m_cachedTargetInformationValid = true; emit effectiveTargetInformationChanged(); }