mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-24 23:49:18 -06:00
cmake: Fix default file translate mode when using libuv
On Windows, libuv's one-time initialization changes the C runtime library's `_fmode` setting to `_O_BINARY`, thus causing files to open as binary after that instead of the default `_O_TEXT` mode. See upstream libuv issue 840. Work around the problem by performing libuv initialization early and then restoring `_fmode`. In particular, this currently affects server mode. Without this fix, the `_fmode` setting changes when the server mode initializes libuv. Fixes: #16962
This commit is contained in:
@@ -27,6 +27,10 @@
|
||||
#include <vector>
|
||||
|
||||
#ifdef CMAKE_USE_LIBUV
|
||||
#ifdef _WIN32
|
||||
#include <fcntl.h> /* _O_TEXT */
|
||||
#include <stdlib.h> /* _set_fmode, _fmode */
|
||||
#endif
|
||||
#include "cm_uv.h"
|
||||
#endif
|
||||
|
||||
@@ -168,6 +172,18 @@ int main(int ac, char const* const* av)
|
||||
ac = args.argc();
|
||||
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::FindCMakeResources(av[0]);
|
||||
if (ac > 1) {
|
||||
|
||||
Reference in New Issue
Block a user