summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/utils/Util.hs14
1 files changed, 13 insertions, 1 deletions
diff --git a/compiler/utils/Util.hs b/compiler/utils/Util.hs
index 41f63f2246..673088159f 100644
--- a/compiler/utils/Util.hs
+++ b/compiler/utils/Util.hs
@@ -1314,7 +1314,8 @@ modificationTimeIfExists f = do
-- also results in a skip.
withAtomicRename :: (MonadIO m) => FilePath -> (FilePath -> m a) -> m a
-withAtomicRename targetFile f = do
+withAtomicRename targetFile f
+ | enableAtomicRename = do
-- The temp file must be on the same file system (mount) as the target file
-- to result in an atomic move on most platforms.
-- The standard way to ensure that is to place it into the same directory.
@@ -1325,6 +1326,17 @@ withAtomicRename targetFile f = do
liftIO $ renameFile temp targetFile
return res
+ | otherwise = f targetFile
+ where
+ -- As described in #16450, enabling this causes spurious build failures due
+ -- to apparently missing files.
+ enableAtomicRename :: Bool
+#if defined(mingw32_BUILD_OS)
+ enableAtomicRename = False
+#else
+ enableAtomicRename = True
+#endif
+
-- --------------------------------------------------------------
-- split a string at the last character where 'pred' is True,
-- returning a pair of strings. The first component holds the string