ENH: added better error checking for cases when there is a CMakeCache.txt file but it is not readable

This commit is contained in:
Ken Martin 2005-08-11 13:20:23 -04:00
parent 8a537ce330
commit 039d4b604e
2 changed files with 46 additions and 14 deletions

View File

@ -745,19 +745,30 @@ void CMakeSetupDialog::OnChangeWhereBuild()
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager(); cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
cmCacheManager::CacheIterator it = cachem->NewIterator(); cmCacheManager::CacheIterator it = cachem->NewIterator();
if (cmSystemTools::FileExists(cache_file.c_str()) &&
cachem->LoadCache(path.c_str()) && m_GeneratorPicked = false;
it.Find("CMAKE_HOME_DIRECTORY"))
// 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()))
{ {
path = ConvertToWindowsPath(it.GetValue()); if (cachem->LoadCache(path.c_str()))
this->m_WhereSource = path.c_str(); {
this->m_WhereSourceControl.SetWindowText(this->m_WhereSource); if (it.Find("CMAKE_HOME_DIRECTORY"))
this->OnChangeWhereSource(); {
m_GeneratorPicked = true; path = ConvertToWindowsPath(it.GetValue());
} this->m_WhereSource = path.c_str();
else this->m_WhereSourceControl.SetWindowText(this->m_WhereSource);
{ this->OnChangeWhereSource();
m_GeneratorPicked = false; 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(); m_CacheEntriesList.RemoveAll();
@ -945,7 +956,17 @@ void CMakeSetupDialog::LoadCacheFromDiskToGUI()
cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager(); cmCacheManager *cachem = this->m_CMakeInstance->GetCacheManager();
if(m_WhereBuild != "") 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(); cmCacheManager::CacheIterator itm = cachem->NewIterator();
if ( itm.Find("CMAKE_HOME_DIRECTORY")) if ( itm.Find("CMAKE_HOME_DIRECTORY"))
{ {

View File

@ -1515,7 +1515,18 @@ void cmake::AddDefaultGenerators()
int cmake::LoadCache() int cmake::LoadCache()
{ {
m_CacheManager->LoadCache(this->GetHomeOutputDirectory()); // could we not read the cache
if (!m_CacheManager->LoadCache(this->GetHomeOutputDirectory()))
{
// if it does exist, but isn;t readable then warn the user
std::string cacheFile = this->GetHomeOutputDirectory();
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 -1;
}
}
if (m_CMakeCommand.size() < 2) if (m_CMakeCommand.size() < 2)
{ {