@@ -36,7 +36,7 @@ import Data.Version (showVersion)
36import qualified Data.Map as M
36import qualified Data.Map as M
37import qualified Data.ByteString.Char8 as B
37import qualified Data.ByteString.Char8 as B
39−import System.Directory (doesDirectoryExist, doesFileExist, getModificationTime, createDirectoryIfMissing)
39+import System.Directory (doesFileExist, getModificationTime, createDirectoryIfMissing)
40import System.FilePath ((</>), takeDirectory, addExtension, dropExtension)
40import System.FilePath ((</>), takeDirectory, addExtension, dropExtension)
41import System.IO.Error (tryIOError)
41import System.IO.Error (tryIOError)
42import System.IO.UTF8
42import System.IO.UTF8
@@ -116,11 +116,9 @@ buildMakeActions outputDir filePathMap usePrefix =
116 writeTextFile externsFile exts
116 writeTextFile externsFile exts
118 let supportDir = outputDir </> "PureScript"
118 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")
119+ writeTextFile (supportDir </> "PureScript.hh") $ B.unpack $(embedFile "pcc/include/purescript.hh")
122− writeTextFile (supportDir </> "PureScript.cc") $ B.unpack $(embedFile "pcc/include/purescript.cc")
120+ 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")
121+ writeTextFile (supportDir </> "purescript_memory.hh") $ B.unpack $(embedFile "pcc/include/purescript_memory.hh")
125 let inputPath = dropExtension $ getInputFile mn
123 let inputPath = dropExtension $ getInputFile mn
126 hfile = addExtension inputPath "hh"
124 hfile = addExtension inputPath "hh"
@@ -139,10 +137,6 @@ buildMakeActions outputDir filePathMap usePrefix =
139 requiresForeign :: CF.Module a -> Bool
137 requiresForeign :: CF.Module a -> Bool
140 requiresForeign = not . null . CF.moduleForeign
138 requiresForeign = not . null . CF.moduleForeign
142− dirExists :: FilePath -> Make Bool
143− dirExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
144− doesDirectoryExist path
146 textFileExists :: FilePath -> Make Bool
140 textFileExists :: FilePath -> Make Bool
147 textFileExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
141 textFileExists path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ do
148 doesFileExist path
142 doesFileExist path
@@ -156,12 +150,12 @@ buildMakeActions outputDir filePathMap usePrefix =
156 readTextFile path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ readUTF8File path
150 readTextFile path = makeIO (const (ErrorMessage [] $ CannotReadFile path)) $ readUTF8File path
158 writeTextFile :: FilePath -> String -> Make ()
152 writeTextFile :: FilePath -> String -> Make ()
159− writeTextFile path text = makeIO (const (ErrorMessage [] $ CannotWriteFile path)) $ do
153+ writeTextFile path text = makeIO (const (ErrorMessage [] $ CannotWriteFile path)) $ do
160− mkdirp path
154+ fileExists <- doesFileExist path
161− writeFile path text
155+ when (not fileExists) $ do
163− mkdirp :: FilePath -> IO ()
164− mkdirp = createDirectoryIfMissing True . takeDirectory
156+ createDirectoryIfMissing True (takeDirectory path)
157+ _ <- tryIOError $ writeFile path text
166 -- | Render a progress message
160 -- | Render a progress message
167 renderProgressMessage :: P.ProgressMessage -> String
161 renderProgressMessage :: P.ProgressMessage -> String