summaryrefslogtreecommitdiffstats
path: root/Source/cmSystemTools.cxx
diff options
context:
space:
mode:
authorPavel P <pavlov.pavel@gmail.com>2018-01-21 08:39:18 (GMT)
committerBrad King <brad.king@kitware.com>2018-01-24 13:59:33 (GMT)
commitc3b80e86640630036e855775692268531e94f3c1 (patch)
tree0488c81bc0be1829594ec4fd1e9c5f23ba63d60c /Source/cmSystemTools.cxx
parent06d607271ed73c2540647c6d257f8deacd86ecae (diff)
downloadCMake-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.cxx8
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