diff options
Diffstat (limited to 'Source/MFCDialog')
-rw-r--r-- | Source/MFCDialog/CMakeSetupDialog.cpp | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp index 594d060..a6ebc46 100644 --- a/Source/MFCDialog/CMakeSetupDialog.cpp +++ b/Source/MFCDialog/CMakeSetupDialog.cpp @@ -745,19 +745,30 @@ void CMakeSetupDialog::OnChangeWhereBuild() cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager(); cmCacheManager::CacheIterator it = cachem->NewIterator(); - if (cmSystemTools::FileExists(cache_file.c_str()) && - cachem->LoadCache(path.c_str()) && - it.Find("CMAKE_HOME_DIRECTORY")) - { - path = ConvertToWindowsPath(it.GetValue()); - this->m_WhereSource = path.c_str(); - this->m_WhereSourceControl.SetWindowText(this->m_WhereSource); - this->OnChangeWhereSource(); - m_GeneratorPicked = true; - } - else + + m_GeneratorPicked = false; + + // make sure we have a normal cache file, specifically if one exists make + // sure it can be read + if (cmSystemTools::FileExists(cache_file.c_str())) { - m_GeneratorPicked = false; + if (cachem->LoadCache(path.c_str())) + { + if (it.Find("CMAKE_HOME_DIRECTORY")) + { + path = ConvertToWindowsPath(it.GetValue()); + this->m_WhereSource = path.c_str(); + this->m_WhereSourceControl.SetWindowText(this->m_WhereSource); + this->OnChangeWhereSource(); + m_GeneratorPicked = true; + } + } + else + { + //file exists but cqnnot be read + cmSystemTools::Error("There is a CMakeCache.txt file for the current binary tree but cmake does not have permission to read it. Please check the permissions of the directory you are trying to run CMake on."); + return; + } } m_CacheEntriesList.RemoveAll(); @@ -945,7 +956,17 @@ void CMakeSetupDialog::LoadCacheFromDiskToGUI() cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager(); if(m_WhereBuild != "") { - cachem->LoadCache(m_WhereBuild); + if (!cachem->LoadCache(m_WhereBuild)) + { + // if it does exist, but isn;t readable then warn the user + std::string cacheFile = m_WhereBuild; + cacheFile += "/CMakeCache.txt"; + if(cmSystemTools::FileExists(cacheFile.c_str())) + { + cmSystemTools::Error("There is a CMakeCache.txt file for the current binary tree but cmake does not have permission to read it. Please check the permissions of the directory you are trying to run CMake on."); + return; + } + } cmCacheManager::CacheIterator itm = cachem->NewIterator(); if ( itm.Find("CMAKE_HOME_DIRECTORY")) { |