Просмотр исходного кода

cmake: Fix loading CMake sources from long paths on Windows

Pass a Windows extended path to the lexer so it can open long paths.
Matt Jaeger 4 лет назад
Родитель
Сommit
2fe39dc306
1 измененных файлов с 11 добавлено и 1 удалено
  1. 11 1
      Source/cmListFileCache.cxx

+ 11 - 1
Source/cmListFileCache.cxx

@@ -7,6 +7,10 @@
 #include <sstream>
 #include <utility>
 
+#ifdef _WIN32
+#  include <cmsys/Encoding.hxx>
+#endif
+
 #include "cmListFileLexer.h"
 #include "cmMessageType.h"
 #include "cmMessenger.h"
@@ -83,9 +87,15 @@ bool cmListFileParser::ParseFile(const char* filename)
 {
   this->FileName = filename;
 
+#ifdef _WIN32
+  std::string expandedFileName = cmsys::Encoding::ToNarrow(
+    cmSystemTools::ConvertToWindowsExtendedPath(filename));
+  filename = expandedFileName.c_str();
+#endif
+
   // Open the file.
   cmListFileLexer_BOM bom;
-  if (!cmListFileLexer_SetFileName(this->Lexer, this->FileName, &bom)) {
+  if (!cmListFileLexer_SetFileName(this->Lexer, filename, &bom)) {
     this->IssueFileOpenError("cmListFileCache: error can not open file.");
     return false;
   }