diff options
author | Pavel P <pavlov.pavel@gmail.com> | 2018-01-21 08:39:18 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-01-24 13:59:33 (GMT) |
commit | c3b80e86640630036e855775692268531e94f3c1 (patch) | |
tree | 0488c81bc0be1829594ec4fd1e9c5f23ba63d60c /Source/cmSystemTools.cxx | |
parent | 06d607271ed73c2540647c6d257f8deacd86ecae (diff) | |
download | CMake-c3b80e86640630036e855775692268531e94f3c1.zip CMake-c3b80e86640630036e855775692268531e94f3c1.tar.gz CMake-c3b80e86640630036e855775692268531e94f3c1.tar.bz2 |
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`.
Diffstat (limited to 'Source/cmSystemTools.cxx')
-rw-r--r-- | Source/cmSystemTools.cxx | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 06b0b3c..ce08465 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -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 |