@@ -40,7 +40,7 @@ import System.Directory (canonicalizePath, createDirectoryIfMissing,
40
40
doesFileExist , doesDirectoryExist , getDirectoryContents ,
41
41
renameFile , removeFile , getAppUserDataDirectory ,
42
42
createDirectory , removeDirectoryRecursive ,
43
- createDirectoryIfMissing )
43
+ createDirectoryIfMissing , makeAbsolute )
44
44
import System.Console.GetOpt
45
45
import System.Process
46
46
import System.IO
@@ -220,11 +220,17 @@ configFile opts = bo_stateDir opts </> "hackage-build-config"
220
220
writeCabalConfig :: BuildOpts -> BuildConfig -> IO ()
221
221
writeCabalConfig opts config = do
222
222
let tarballsDir = bo_stateDir opts </> " cached-tarballs"
223
+ createDirectoryIfMissing False tarballsDir
224
+
225
+ -- Because we call runProcess with installDirectory as the cwd,
226
+ -- this relative path won't be valid when cabal is running.
227
+ -- An absolute path remains valid independently of cwd.
228
+ absTarballsDir <- makeAbsolute tarballsDir
229
+
223
230
writeFile (bo_stateDir opts </> " cabal-config" ) . unlines $
224
231
[ " remote-repo: " ++ srcName uri ++ " :" ++ show uri
225
232
| uri <- bc_srcURI config : bc_auxURIs config ]
226
- ++ [ " remote-repo-cache: " ++ tarballsDir ]
227
- createDirectoryIfMissing False tarballsDir
233
+ ++ [ " remote-repo-cache: " ++ absTarballsDir ]
228
234
229
235
230
236
----------------------
@@ -798,6 +804,7 @@ cabal opts cmd args moutput = do
798
804
: verbosityArgs
799
805
++ args
800
806
info verbosity $ unwords (" cabal" : all_args)
807
+ createDirectoryIfMissing False $ installDirectory opts
801
808
ph <- runProcess " cabal" all_args (Just $ installDirectory opts)
802
809
Nothing Nothing moutput moutput
803
810
waitForProcess ph
0 commit comments