BUG: also put a variable into the cache when defined using -D if no type is

given, then STRING is used. Also add command line option -U as suggested for
undefining cache variables. This fixes #4896 and #4264.

Alex
This commit is contained in:
Alexander Neundorf 2007-06-01 14:16:46 -04:00
parent f94b8cfd3c
commit 0be0283f30
2 changed files with 53 additions and 1 deletions

View File

@ -299,7 +299,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
{ {
this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(), this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(),
"No help, variable specified on the command line.", "No help, variable specified on the command line.",
type); type==cmCacheManager::UNINITIALIZED?cmCacheManager::STRING:type);
} }
else else
{ {
@ -309,6 +309,49 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
return false; return false;
} }
} }
else if(arg.find("-U",0) == 0)
{
std::string entryPattern = arg.substr(2);
if(entryPattern.size() == 0)
{
++i;
if(i < args.size())
{
entryPattern = args[i];
}
else
{
cmSystemTools::Error("-U must be followed with VAR.");
return false;
}
}
//go through all cache entries and collect the vars which will be removed
std::vector<std::string> entriesToDelete;
cmCacheManager::CacheIterator it =
this->CacheManager->GetCacheIterator();
for ( it.Begin(); !it.IsAtEnd(); it.Next() )
{
cmCacheManager::CacheEntryType t = it.GetType();
if(t != cmCacheManager::STATIC && t != cmCacheManager::UNINITIALIZED)
{
std::string entryName = it.GetName();
if (entryName.find(entryPattern) != std::string::npos)
{
entriesToDelete.push_back(entryName);
}
}
}
// now remove them from the cache
for(std::vector<std::string>::const_iterator currentEntry =
entriesToDelete.begin();
currentEntry != entriesToDelete.end();
++currentEntry)
{
this->CacheManager->RemoveCacheEntry(currentEntry->c_str());
}
}
else if(arg.find("-C",0) == 0) else if(arg.find("-C",0) == 0)
{ {
std::string path = arg.substr(2); std::string path = arg.substr(2);
@ -432,6 +475,10 @@ void cmake::SetArgs(const std::vector<std::string>& args)
{ {
// skip for now // skip for now
} }
else if(arg.find("-U",0) == 0)
{
// skip for now
}
else if(arg.find("-C",0) == 0) else if(arg.find("-C",0) == 0)
{ {
// skip for now // skip for now

View File

@ -388,6 +388,11 @@ private:
"for the project. This option may be used to specify a setting " \ "for the project. This option may be used to specify a setting " \
"that takes priority over the project's default value. The option " \ "that takes priority over the project's default value. The option " \
"may be repeated for as many cache entries as desired."}, \ "may be repeated for as many cache entries as desired."}, \
{"-U <var>", "Remove one or more cmake cache entries.", \
"This option may be used to remove one or more variables from the " \
"CMakeCache.txt file, so that CMake will search them again. All " \
"variables which contain \"<var>\" will be removed. The option may be "\
"repeated for as many cache entries as desired."}, \
{"-G <generator-name>", "Specify a makefile generator.", \ {"-G <generator-name>", "Specify a makefile generator.", \
"CMake may support multiple native build systems on certain platforms. " \ "CMake may support multiple native build systems on certain platforms. " \
"A makefile generator is responsible for generating a particular build " \ "A makefile generator is responsible for generating a particular build " \