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 *)
{
m_CMakeInstance->LoadCache();
m_CMakeInstance->LoadCache(true);
m_CMakeInstance->SetCacheArgs(m_Args);
}

View File

@ -809,7 +809,9 @@ int cmake::Configure()
int cmake::Run(const std::vector<std::string>& 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());
return -1;
@ -836,7 +838,7 @@ int cmake::Run(const std::vector<std::string>& args)
m_CMakeCommand = args[0];
// load the cache
this->LoadCache();
this->LoadCache(true);
// Add any cache 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());
@ -963,6 +965,38 @@ int cmake::LoadCache()
{
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;
}

View File

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