diff options
author | Alexander Neundorf <neundorf@kde.org> | 2007-06-01 18:16:46 (GMT) |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2007-06-01 18:16:46 (GMT) |
commit | 0be0283f30c58c82797579ca19cf0adf9b83dbad (patch) | |
tree | 3c40d8dcbdf37bd0990f771d709ddf0c3edb8b7d /Source | |
parent | f94b8cfd3cf494d204db0d0454063b77197e2ec6 (diff) | |
download | CMake-0be0283f30c58c82797579ca19cf0adf9b83dbad.zip CMake-0be0283f30c58c82797579ca19cf0adf9b83dbad.tar.gz CMake-0be0283f30c58c82797579ca19cf0adf9b83dbad.tar.bz2 |
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
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmake.cxx | 49 | ||||
-rw-r--r-- | Source/cmake.h | 5 |
2 files changed, 53 insertions, 1 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 973fc20..aae773f 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -299,7 +299,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args) { this->CacheManager->AddCacheEntry(var.c_str(), value.c_str(), "No help, variable specified on the command line.", - type); + type==cmCacheManager::UNINITIALIZED?cmCacheManager::STRING:type); } else { @@ -309,6 +309,49 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args) 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) { std::string path = arg.substr(2); @@ -432,6 +475,10 @@ void cmake::SetArgs(const std::vector<std::string>& args) { // skip for now } + else if(arg.find("-U",0) == 0) + { + // skip for now + } else if(arg.find("-C",0) == 0) { // skip for now diff --git a/Source/cmake.h b/Source/cmake.h index d0ba300..c148515 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -388,6 +388,11 @@ private: "for the project. This option may be used to specify a setting " \ "that takes priority over the project's default value. The option " \ "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.", \ "CMake may support multiple native build systems on certain platforms. " \ "A makefile generator is responsible for generating a particular build " \ |