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:
parent
0b7d51d79f
commit
3d4a2fdc52
|
@ -992,7 +992,7 @@ void cmCursesMainForm::HandleInput()
|
|||
void cmCursesMainForm::LoadCache(const char *)
|
||||
|
||||
{
|
||||
m_CMakeInstance->LoadCache();
|
||||
m_CMakeInstance->LoadCache(true);
|
||||
m_CMakeInstance->SetCacheArgs(m_Args);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue