RE: ghc-pkg too happy to create ~/.ghc

Thanks, I've committed a version of your patch. Cheers, Simon On 16 March 2005 04:07, Ian Lynagh wrote:
The Debian autobuilders don't let you write to ~ (which seems reasonable, as they are only compiling the software, not running it), so my builds are failing with
---------- ==fptools== /usr/bin/make boot -wr; in /build/buildd/ghc6-6.4/ghc/rts [...] ../utils/ghc-pkg/ghc-pkg-inplace --force --update-package
Fail: createDirectory: permission denied (Permission denied) ----------
The patch below fixes it. I'm not sure I understand why the code is written as it is, though. It looks to me like if any config file given by a FlagConfig is missing then the readFile in readParseDatabase is going to fall over. I don't know what should happen when modifying if there are -f options, so can't suggest a complete replacement.
Thanks Ian
--- ghc6-6.4.orig/ghc/utils/ghc-pkg/Main.hs +++ ghc6-6.4/ghc/utils/ghc-pkg/Main.hs @@ -269,10 +269,6 @@ archdir = appdir `joinFileName` subdir user_conf = archdir `joinFileName` "package.conf" b <- doesFileExist user_conf - when (not b) $ do - putStrLn ("Creating user package database in " ++ user_conf) - createDirectoryIfMissing True archdir - writeFile user_conf emptyPackageConfig
let -- The semantics here are slightly strange. If we are @@ -281,20 +277,23 @@ -- If we are not modifying (eg. list, describe etc.) then -- the user database is included by default. databases - | modify = foldl addDB [global_conf] flags - | not modify = foldl addDB [user_conf,global_conf] flags + | modify || not b = foldl addDB [global_conf] flags + | not modify = foldl addDB [user_conf,global_conf] flags
-- implement the following rules: -- --user means overlap with the user database -- --global means reset to just the global database -- -f <file> means overlap with <file> - addDB dbs FlagUser = if user_conf `elem` dbs - then dbs - else user_conf : dbs + addDB dbs FlagUser + | (modify || b) && (user_conf `notElem` dbs) = user_conf : dbs addDB dbs FlagGlobal = [global_conf] addDB dbs (FlagConfig f) = f : dbs addDB dbs _ = dbs
+ when (not b && user_conf `elem` databases) $ do + putStrLn ("Creating user package database in " ++ user_conf) + createDirectoryIfMissing True archdir + writeFile user_conf emptyPackageConfig db_stack <- mapM readParseDatabase databases return db_stack
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
participants (1)
-
Simon Marlow