git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: work around 'file busy' error (revisit later)
commit9584d22647cae45561ef186cfa42d690290c8c75 authorAndy Arvanitis <andyarvanitis@gmail.com> dateTue 9 Aug 2016, 21:22 (10 years ago) parent05eb1a9
1 file changed+10−16
pcc/Make.hs+10−16
pcc/Make.hs+10−16
@@ -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 (doesDirectoryExist, doesFileExist, getModificationTime, createDirectoryIfMissing)
39+import System.Directory (doesFileExist, getModificationTime, createDirectoryIfMissing)
4040import System.FilePath ((</>), takeDirectory, addExtension, dropExtension)
4141import System.IO.Error (tryIOError)
4242import System.IO.UTF8
@@ -116,11 +116,9 @@ buildMakeActions outputDir filePathMap usePrefix =
116116 writeTextFile externsFile exts
117117
118118 let supportDir = outputDir </> "PureScript"
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")
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")
124122
125123 let inputPath = dropExtension $ getInputFile mn
126124 hfile = addExtension inputPath "hh"
@@ -139,10 +137,6 @@ buildMakeActions outputDir filePathMap usePrefix =
139137 requiresForeign :: CF.Module a -> Bool
140138 requiresForeign = not . null . CF.moduleForeign
141139
142− dirExists :: FilePath -> Make Bool
143− dirExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
144− doesDirectoryExist path
145−
146140 textFileExists :: FilePath -> Make Bool
147141 textFileExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
148142 doesFileExist path
@@ -156,12 +150,12 @@ buildMakeActions outputDir filePathMap usePrefix =
156150 readTextFile path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ readUTF8File path
157151
158152 writeTextFile :: FilePath -> String -> Make ()
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
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 ()
165159
166160 -- | Render a progress message
167161 renderProgressMessage :: P.ProgressMessage -> String