summaryrefslogtreecommitdiffstats
path: root/Source/cmakewizard.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmakewizard.cxx')
-rw-r--r--Source/cmakewizard.cxx108
1 files changed, 108 insertions, 0 deletions
diff --git a/Source/cmakewizard.cxx b/Source/cmakewizard.cxx
new file mode 100644
index 0000000..6542c93
--- /dev/null
+++ b/Source/cmakewizard.cxx
@@ -0,0 +1,108 @@
+#include "cmCacheManager.h"
+#include "cmake.h"
+
+bool advanced = false;
+
+void Ask(const char* key, cmCacheManager::CacheEntry & entry)
+{
+ if(!advanced)
+ {
+ if(cmCacheManager::GetInstance()->IsAdvanced(key))
+ {
+ return;
+ }
+ }
+
+ std::cout << "Variable Name: " << key << "\n";
+ std::cout << "Description: " << entry.m_HelpString << "\n";
+ std::cout << "Current Value: " << entry.m_Value.c_str() << "\n";
+ std::cout << "New Value (Enter to keep current value): ";
+ char buffer[4096];
+ buffer[0] = 0;
+ std::cin.getline(buffer, sizeof(buffer));
+ if(buffer[0])
+ {
+ cmCacheManager::CacheEntry *entry =
+ cmCacheManager::GetInstance()->GetCacheEntry(key);
+ if(entry)
+ {
+ entry->m_Value = buffer;
+ }
+ else
+ {
+ std::cerr << "strange error, should be in cache but is not... " << key << "\n";
+ }
+ }
+ std::cout << "\n";
+}
+
+
+main(int ac, char** av)
+{
+ std::vector<std::string> args;
+ for(int j=0; j < ac; ++j)
+ {
+ args.push_back(av[j]);
+ }
+ cmSystemTools::DisableRunCommandOutput();
+ std::cout << "Would you like to see advanced options? [No]:";
+ char buffer[4096];
+ buffer[0] = 0;
+ std::cin.getline(buffer, sizeof(buffer));
+ if(buffer[0])
+ {
+ if(buffer[0] == 'y' || buffer[0] == 'Y')
+ {
+ advanced = true;
+ }
+ }
+ cmake make;
+ cmCacheManager::CacheEntryMap askedCache;
+ bool asked = false;
+ // continue asking questions until no new questions are asked
+ do
+ {
+ asked = false;
+ // run cmake
+ std::cout << "Please wait while cmake processes CMakeLists.txt files....\n";
+ make.Generate(args);
+ std::cout << "\n";
+ // load the cache from disk
+ cmCacheManager::GetInstance()->
+ LoadCache(cmSystemTools::GetCurrentWorkingDirectory().c_str());
+ cmCacheManager::CacheEntryMap const& currentCache =
+ cmCacheManager::GetInstance()->GetCacheMap();
+ // iterate over all entries in the cache
+ for(cmCacheManager::CacheEntryMap::const_iterator i = currentCache.begin();
+ i != currentCache.end(); ++i)
+ {
+ std::string key = i->first;
+ cmCacheManager::CacheEntry ce = i->second;
+ if(ce.m_Type == cmCacheManager::INTERNAL
+ || ce.m_Type == cmCacheManager::STATIC)
+ {
+ continue;
+ }
+ if(askedCache.count(key))
+ {
+ cmCacheManager::CacheEntry& e = askedCache.find(key)->second;
+ if(e.m_Value != ce.m_Value)
+ {
+ Ask(key.c_str(), ce);
+ asked = true;
+ }
+ }
+ else
+ {
+ Ask(key.c_str(), ce);
+ asked = true;
+ }
+ askedCache[key] = i->second;
+ }
+ cmCacheManager::GetInstance()->
+ SaveCache(cmSystemTools::GetCurrentWorkingDirectory().c_str());
+
+ }
+ while(asked);
+ std::cout << "CMake complete, run make to build project.\n";
+}