| 
					
				 | 
			
			
				@@ -2377,43 +2377,30 @@ cmSystemTools::WaitForLineResult cmSystemTools::WaitForLine( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef _WIN32 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void EnsureStdPipe(DWORD fd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void EnsureStdPipe(int stdFd, DWORD nStdHandle, FILE* stream, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          const wchar_t* mode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (GetStdHandle(fd) != INVALID_HANDLE_VALUE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (fileno(stream) >= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  SECURITY_ATTRIBUTES sa; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  sa.nLength = sizeof(sa); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  sa.lpSecurityDescriptor = nullptr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  sa.bInheritHandle = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  HANDLE h = CreateFileW( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    L"NUL", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fd == STD_INPUT_HANDLE ? FILE_GENERIC_READ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                           : FILE_GENERIC_WRITE | FILE_READ_ATTRIBUTES, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_EXISTING, 0, nullptr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (h == INVALID_HANDLE_VALUE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LPSTR message = nullptr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    DWORD size = FormatMessageA( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        FORMAT_MESSAGE_IGNORE_INSERTS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      nullptr, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (LPSTR)&message, 0, nullptr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::string msg = std::string(message, size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LocalFree(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::cerr << "failed to open NUL for missing stdio pipe: " << msg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  _close(stdFd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  _wfreopen(L"NUL", mode, stream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int fd = fileno(stream); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (fd < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    perror("failed to open NUL for missing stdio pipe"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     abort(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  SetStdHandle(fd, h); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (fd != stdFd) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    _dup2(fd, stdFd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SetStdHandle(nStdHandle, reinterpret_cast<HANDLE>(_get_osfhandle(fd))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void cmSystemTools::EnsureStdPipes() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EnsureStdPipe(STD_INPUT_HANDLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EnsureStdPipe(STD_OUTPUT_HANDLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EnsureStdPipe(STD_ERROR_HANDLE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EnsureStdPipe(0, STD_INPUT_HANDLE, stdin, L"rb"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EnsureStdPipe(1, STD_OUTPUT_HANDLE, stdout, L"wb"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EnsureStdPipe(2, STD_ERROR_HANDLE, stderr, L"wb"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void EnsureStdPipe(int fd) 
			 |