git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Revert "C++: work around 'file busy' error (revisit later)"

This reverts commit 9584d22647cae45561ef186cfa42d690290c8c75.

commit2838edcafb868fad88acb60d2fae6fa8fd3d781a authorAndy Arvanitis <andyarvanitis@gmail.com> dateWed 10 Aug 2016, 19:55 (10 years ago) parent9584d22
1 file changed+16−10
pcc/Make.hs+16−10
pcc/Make.hs+16−10
@@ -36,7 +36,7 @@ import Data.Version (showVersion)
3636import qualified Data.Map as M
3737import qualified Data.ByteString.Char8 as B
3838
39−import System.Directory (doesFileExist, getModificationTime, createDirectoryIfMissing)
39+import System.Directory (doesDirectoryExist, doesFileExist, getModificationTime, createDirectoryIfMissing)
4040import System.FilePath ((</>), takeDirectory, addExtension, dropExtension)
4141import System.IO.Error (tryIOError)
4242import System.IO.UTF8
@@ -116,9 +116,11 @@ buildMakeActions outputDir filePathMap usePrefix =
116116 writeTextFile externsFile exts
117117
118118 let supportDir = outputDir </> "PureScript"
119− writeTextFile (supportDir </> "PureScript.hh") $ B.unpack $(embedFile "pcc/include/purescript.hh")
120− writeTextFile (supportDir </> "PureScript.cc") $ B.unpack $(embedFile "pcc/include/purescript.cc")
121− writeTextFile (supportDir </> "purescript_memory.hh") $ B.unpack $(embedFile "pcc/include/purescript_memory.hh")
119+ supportFilesExist <- dirExists supportDir
120+ when (not supportFilesExist) $ do
121+ writeTextFile (supportDir </> "PureScript.hh") $ B.unpack $(embedFile "pcc/include/purescript.hh")
122+ writeTextFile (supportDir </> "PureScript.cc") $ B.unpack $(embedFile "pcc/include/purescript.cc")
123+ writeTextFile (supportDir </> "purescript_memory.hh") $ B.unpack $(embedFile "pcc/include/purescript_memory.hh")
122124
123125 let inputPath = dropExtension $ getInputFile mn
124126 hfile = addExtension inputPath "hh"
@@ -137,6 +139,10 @@ buildMakeActions outputDir filePathMap usePrefix =
137139 requiresForeign :: CF.Module a -> Bool
138140 requiresForeign = not . null . CF.moduleForeign
139141
142+ dirExists :: FilePath -> Make Bool
143+ dirExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
144+ doesDirectoryExist path
145+
140146 textFileExists :: FilePath -> Make Bool
141147 textFileExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
142148 doesFileExist path
@@ -150,12 +156,12 @@ buildMakeActions outputDir filePathMap usePrefix =
150156 readTextFile path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ readUTF8File path
151157
152158 writeTextFile :: FilePath -> String -> Make ()
153− writeTextFile path text = makeIO (const (ErrorMessage [] $ CannotWriteFile path)) $ do
154− fileExists <- doesFileExist path
155− when (not fileExists) $ do
156− createDirectoryIfMissing True (takeDirectory path)
157− _ <- tryIOError $ writeFile path text
158− return ()
159+ writeTextFile path text = makeIO (const (ErrorMessage [] $ CannotWriteFile path)) $ do
160+ mkdirp path
161+ writeFile path text
162+ where
163+ mkdirp :: FilePath -> IO ()
164+ mkdirp = createDirectoryIfMissing True . takeDirectory
159165
160166 -- | Render a progress message
161167 renderProgressMessage :: P.ProgressMessage -> String