Windows: Add support for running CMake tools through a symlink

When `cmake.exe` is executed through a symlink, `GetModuleFileNameW`
will return location of the link instead of the real path of
`cmake.exe`.  This results in the following error output:

    CMake Error: Could not find CMAKE_ROOT !!!
    CMake has most likely not been installed correctly.

Use `cmSystemTools::GetRealPath` in `FindCMakeResources` on Windows
to resolve any symlink returned by `GetModuleFileNameW`.
This commit is contained in:
Pavel P 2018-01-21 00:39:18 -08:00 committed by Brad King
parent 06d607271e
commit c3b80e8664

View File

@ -2107,8 +2107,12 @@ void cmSystemTools::FindCMakeResources(const char* argv0)
(void)argv0; // ignore this on windows
wchar_t modulepath[_MAX_PATH];
::GetModuleFileNameW(NULL, modulepath, sizeof(modulepath));
exe_dir =
cmSystemTools::GetFilenamePath(cmsys::Encoding::ToNarrow(modulepath));
std::string path = cmsys::Encoding::ToNarrow(modulepath);
std::string realPath = cmSystemTools::GetRealPath(path, NULL);
if (realPath.empty()) {
realPath = path;
}
exe_dir = cmSystemTools::GetFilenamePath(realPath);
#elif defined(__APPLE__)
(void)argv0; // ignore this on OS X
#define CM_EXE_PATH_LOCAL_SIZE 16384