In certain cases, try to guess the source directory, so that you can run cmake or ccmake without specifying source dir

This commit is contained in:
Andy Cedilnik 2002-11-06 12:04:24 -05:00
parent 0b7d51d79f
commit 3d4a2fdc52
3 changed files with 39 additions and 5 deletions

View File

@ -992,7 +992,7 @@ void cmCursesMainForm::HandleInput()
void cmCursesMainForm::LoadCache(const char *) void cmCursesMainForm::LoadCache(const char *)
{ {
m_CMakeInstance->LoadCache(); m_CMakeInstance->LoadCache(true);
m_CMakeInstance->SetCacheArgs(m_Args); m_CMakeInstance->SetCacheArgs(m_Args);
} }

View File

@ -809,7 +809,9 @@ int cmake::Configure()
int cmake::Run(const std::vector<std::string>& args) int cmake::Run(const std::vector<std::string>& args)
{ {
// a quick check for args // a quick check for args
if(args.size() == 1 && !cmSystemTools::FileExists("CMakeLists.txt")) if(args.size() == 1 &&
!cmSystemTools::FileExists("CMakeLists.txt") &&
!cmSystemTools::FileExists("CMakeCache.txt"))
{ {
this->Usage(args[0].c_str()); this->Usage(args[0].c_str());
return -1; return -1;
@ -836,7 +838,7 @@ int cmake::Run(const std::vector<std::string>& args)
m_CMakeCommand = args[0]; m_CMakeCommand = args[0];
// load the cache // load the cache
this->LoadCache(); this->LoadCache(true);
// Add any cache args // Add any cache args
this->SetCacheArgs(args); this->SetCacheArgs(args);
@ -948,7 +950,7 @@ void cmake::AddDefaultCommands()
} }
} }
int cmake::LoadCache() int cmake::LoadCache(bool fix_paths)
{ {
m_CacheManager->LoadCache(this->GetHomeOutputDirectory()); m_CacheManager->LoadCache(this->GetHomeOutputDirectory());
@ -963,6 +965,38 @@ int cmake::LoadCache()
{ {
return -3; return -3;
} }
if ( fix_paths && cmSystemTools::FileExists("CMakeCache.txt") )
{
// If we are in directory that has CMakeCache inside and we are
// fixing paths then we might have to modify home directory and
// start directory.
const char* home = this->GetHomeDirectory();
const char* startdirectory = this->GetStartDirectory();
const char* cachehome = this->GetCacheDefinition("CMAKE_HOME_DIRECTORY");
if ( cachehome && strcmp(home, cachehome) != 0 )
{
// If cachehome exists (it was in the cache), and the current
// home is not the same as the one from cache (which means we
// are not doing in source build), then fix home and start
// directory.
home = cachehome;
startdirectory = cachehome;
}
// If cachehome is not set and cmakelists.txt does not exists,
// that means we are doing out of source build and the
// cmakecache.txt was edited manually and we cannot find the right
// source directory.
if ( !cachehome && !cmSystemTools::FileExists("CMakeLists.txt") )
{
cmSystemTools::Error("Source directory not specified");
return -4;
}
// Ok, let's set the home and start directory.
this->SetHomeDirectory(home);
this->SetStartDirectory(startdirectory);
}
return 0; return 0;
} }

View File

@ -146,7 +146,7 @@ class cmake
* GlobalGenerator. This in turn will read in an process all the CMakeList * GlobalGenerator. This in turn will read in an process all the CMakeList
* files for the tree. It will not produce any actual Makefiles, or * files for the tree. It will not produce any actual Makefiles, or
* workspaces. Generate does that. */ * workspaces. Generate does that. */
int LoadCache(); int LoadCache(bool fix_paths = false);
///! Create a GlobalGenerator ///! Create a GlobalGenerator
cmGlobalGenerator* CreateGlobalGenerator(const char* name); cmGlobalGenerator* CreateGlobalGenerator(const char* name);