QbsProjectManager: Take product profiles into account.

- Identify products by the name/profile tuple instead of just the name.
- If the product's profile differs from that of the overall
project, add it to the visual representation.

Change-Id: I4a89db60911277977458370157e435472bbe428f
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
Christian Kandeler
2014-09-05 12:08:15 +02:00
parent 48f19e925b
commit 38320b15f5
7 changed files with 92 additions and 67 deletions

View File

@@ -322,7 +322,7 @@ qbs::BuildJob *QbsProject::build(const qbs::BuildOptions &opts, QStringList prod
foreach (const QString &productName, productNames) {
bool found = false;
foreach (const qbs::ProductData &data, qbsProjectData().allProducts()) {
if (data.name() == productName) {
if (uniqueProductName(data) == productName) {
found = true;
products.append(data);
break;
@@ -583,6 +583,20 @@ void QbsProject::generateErrors(const qbs::ErrorInfo &e)
}
QString QbsProject::productDisplayName(const qbs::Project &project,
const qbs::ProductData &product)
{
QString displayName = product.name();
if (product.profile() != project.profile())
displayName.append(QLatin1String(" [")).append(product.profile()).append(QLatin1Char(']'));
return displayName;
}
QString QbsProject::uniqueProductName(const qbs::ProductData &product)
{
return product.name() + QLatin1Char('.') + product.profile();
}
void QbsProject::parse(const QVariantMap &config, const Environment &env, const QString &dir)
{
prepareForParsing();
@@ -764,14 +778,15 @@ void QbsProject::updateQmlJsCodeModel(const qbs::ProjectData &prj)
modelManager->updateProjectInfo(projectInfo, this);
}
void QbsProject::updateApplicationTargets(const qbs::ProjectData &projectData)
void QbsProject::updateApplicationTargets()
{
ProjectExplorer::BuildTargetInfoList applications;
foreach (const qbs::ProductData &productData, projectData.allProducts()) {
foreach (const qbs::ProductData &productData, m_projectData.allProducts()) {
if (!productData.isEnabled() || !productData.isRunnable())
continue;
const QString displayName = productDisplayName(m_qbsProject, productData);
if (productData.targetArtifacts().isEmpty()) { // No build yet.
applications.list << ProjectExplorer::BuildTargetInfo(productData.name(),
applications.list << ProjectExplorer::BuildTargetInfo(displayName,
Utils::FileName(),
Utils::FileName::fromString(productData.location().fileName()));
continue;
@@ -780,7 +795,7 @@ void QbsProject::updateApplicationTargets(const qbs::ProjectData &projectData)
QTC_ASSERT(ta.isValid(), continue);
if (!ta.isExecutable())
continue;
applications.list << ProjectExplorer::BuildTargetInfo(productData.name(),
applications.list << ProjectExplorer::BuildTargetInfo(displayName,
Utils::FileName::fromString(ta.filePath()),
Utils::FileName::fromString(productData.location().fileName()));
}
@@ -788,14 +803,14 @@ void QbsProject::updateApplicationTargets(const qbs::ProjectData &projectData)
activeTarget()->setApplicationTargets(applications);
}
void QbsProject::updateDeploymentInfo(const qbs::Project &project)
void QbsProject::updateDeploymentInfo()
{
ProjectExplorer::DeploymentData deploymentData;
if (project.isValid()) {
if (m_qbsProject.isValid()) {
qbs::InstallOptions installOptions;
installOptions.setInstallRoot(QLatin1String("/"));
foreach (const qbs::InstallableFile &f,
project.installableFilesForProject(m_projectData, installOptions)) {
foreach (const qbs::InstallableFile &f, m_qbsProject
.installableFilesForProject(m_projectData, installOptions)) {
deploymentData.addFile(f.sourceFilePath(), f.targetDirectory(), f.isExecutable()
? ProjectExplorer::DeployableFile::TypeExecutable
: ProjectExplorer::DeployableFile::TypeNormal);
@@ -806,8 +821,8 @@ void QbsProject::updateDeploymentInfo(const qbs::Project &project)
void QbsProject::updateBuildTargetData()
{
updateApplicationTargets(m_projectData);
updateDeploymentInfo(m_qbsProject);
updateApplicationTargets();
updateDeploymentInfo();
foreach (Target *t, targets())
t->updateDefaultRunConfigurations();
}