summaryrefslogtreecommitdiffstats
path: root/Source/cmFindPackageCommand.cxx
diff options
context:
space:
mode:
authorAlex Neundorf <neundorf@kde.org>2012-05-06 14:32:10 (GMT)
committerAlex Neundorf <neundorf@kde.org>2012-05-06 14:32:10 (GMT)
commit1f8f58a0b9a7883aedf7a4bcb185e9784db4f13b (patch)
treec1b4364a493bcd72714a1292c83c50cf1ba2e740 /Source/cmFindPackageCommand.cxx
parentb4a189fd14bd2abf1dba61cd06e540eb8744159e (diff)
downloadCMake-1f8f58a0b9a7883aedf7a4bcb185e9784db4f13b.zip
CMake-1f8f58a0b9a7883aedf7a4bcb185e9784db4f13b.tar.gz
CMake-1f8f58a0b9a7883aedf7a4bcb185e9784db4f13b.tar.bz2
fix #13195: avoid multiple mentions of found packages
Now before adding a package to the list of found or not-found packages, the package is remvoed from both lists before. Alex
Diffstat (limited to 'Source/cmFindPackageCommand.cxx')
-rw-r--r--Source/cmFindPackageCommand.cxx92
1 files changed, 60 insertions, 32 deletions
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 4f9ba7e..be47f95 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -1368,41 +1368,73 @@ bool cmFindPackageCommand::ReadListFile(const char* f, PolicyScopeRule psr)
}
//----------------------------------------------------------------------------
-void cmFindPackageCommand::AppendToProperty(const char* propertyName)
+void cmFindPackageCommand::AppendToFoundProperty(bool found)
{
- std::string propertyValue;
- const char *prop =
- this->Makefile->GetCMakeInstance()->GetProperty(propertyName);
- if (prop && *prop)
+ std::vector<std::string> foundContents;
+ const char *foundProp =
+ this->Makefile->GetCMakeInstance()->GetProperty("PACKAGES_FOUND");
+ if (foundProp && *foundProp)
{
- propertyValue = prop;
+ std::string tmp = foundProp;
- std::vector<std::string> contents;
- cmSystemTools::ExpandListArgument(propertyValue, contents, false);
-
- bool alreadyInserted = false;
- for(std::vector<std::string>::const_iterator it = contents.begin();
- it != contents.end(); ++ it )
+ cmSystemTools::ExpandListArgument(tmp, foundContents, false);
+ std::vector<std::string>::iterator nameIt = std::find(
+ foundContents.begin(), foundContents.end(), this->Name);
+ if(nameIt != foundContents.end())
{
- if (*it == this->Name)
- {
- alreadyInserted = true;
- break;
- }
+ foundContents.erase(nameIt);
}
- if (!alreadyInserted)
+ }
+
+ std::vector<std::string> notFoundContents;
+ const char *notFoundProp =
+ this->Makefile->GetCMakeInstance()->GetProperty("PACKAGES_NOT_FOUND");
+ if (notFoundProp && *notFoundProp)
+ {
+ std::string tmp = notFoundProp;
+
+ cmSystemTools::ExpandListArgument(tmp, notFoundContents, false);
+ std::vector<std::string>::iterator nameIt = std::find(
+ notFoundContents.begin(), notFoundContents.end(), this->Name);
+ if(nameIt != notFoundContents.end())
{
- propertyValue += ";";
- propertyValue += this->Name;
+ notFoundContents.erase(nameIt);
}
}
+
+ if(found)
+ {
+ foundContents.push_back(this->Name);
+ }
else
{
- propertyValue = this->Name;
+ notFoundContents.push_back(this->Name);
+ }
+
+
+ std::string tmp;
+ const char* sep ="";
+ for(size_t i=0; i<foundContents.size(); i++)
+ {
+ tmp += sep;
+ tmp += foundContents[i];
+ sep = ";";
+ }
+
+ this->Makefile->GetCMakeInstance()->SetProperty("PACKAGES_FOUND",
+ tmp.c_str());
+
+ tmp = "";
+ sep = "";
+ for(size_t i=0; i<notFoundContents.size(); i++)
+ {
+ tmp += sep;
+ tmp += notFoundContents[i];
+ sep = ";";
}
- this->Makefile->GetCMakeInstance()->SetProperty(propertyName,
- propertyValue.c_str());
- }
+ this->Makefile->GetCMakeInstance()->SetProperty("PACKAGES_NOT_FOUND",
+ tmp.c_str());
+}
//----------------------------------------------------------------------------
void cmFindPackageCommand::AppendSuccessInformation()
@@ -1413,14 +1445,10 @@ void cmFindPackageCommand::AppendSuccessInformation()
const char* upperResult = this->Makefile->GetDefinition(upperFound.c_str());
const char* result = this->Makefile->GetDefinition(found.c_str());
- if ((cmSystemTools::IsOn(result)) || (cmSystemTools::IsOn(upperResult)))
- {
- this->AppendToProperty("PACKAGES_FOUND");
- }
- else
- {
- this->AppendToProperty("PACKAGES_NOT_FOUND");
- }
+ bool packageFound = ((cmSystemTools::IsOn(result))
+ || (cmSystemTools::IsOn(upperResult)));
+
+ this->AppendToFoundProperty(packageFound);
// Record whether the find was quiet or not, so this can be used
// e.g. in FeatureSummary.cmake