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

Merge topic 'libuv-restore-fmode'

871adefc cmake: Fix default file translate mode when using libuv

Acked-by: Kitware Robot <[email protected]>
Merge-request: !963
Brad King 8 лет назад
Родитель
Сommit
65834d04a2
1 измененных файлов с 16 добавлено и 0 удалено
  1. 16 0
      Source/cmakemain.cxx

+ 16 - 0
Source/cmakemain.cxx

@@ -27,6 +27,10 @@
 #include <vector>
 #include <vector>
 
 
 #ifdef CMAKE_USE_LIBUV
 #ifdef CMAKE_USE_LIBUV
+#ifdef _WIN32
+#include <fcntl.h>  /* _O_TEXT */
+#include <stdlib.h> /* _set_fmode, _fmode */
+#endif
 #include "cm_uv.h"
 #include "cm_uv.h"
 #endif
 #endif
 
 
@@ -168,6 +172,18 @@ int main(int ac, char const* const* av)
   ac = args.argc();
   ac = args.argc();
   av = args.argv();
   av = args.argv();
 
 
+#if defined(CMAKE_USE_LIBUV) && defined(_WIN32)
+  // Perform libuv one-time initialization now, and then un-do its
+  // global _fmode setting so that using libuv does not change the
+  // default file text/binary mode.  See libuv issue 840.
+  uv_loop_close(uv_default_loop());
+#ifdef _MSC_VER
+  _set_fmode(_O_TEXT);
+#else
+  _fmode = _O_TEXT;
+#endif
+#endif
+
   cmSystemTools::EnableMSVCDebugHook();
   cmSystemTools::EnableMSVCDebugHook();
   cmSystemTools::FindCMakeResources(av[0]);
   cmSystemTools::FindCMakeResources(av[0]);
   if (ac > 1) {
   if (ac > 1) {