ghc-pkg too happy to create ~/.ghc

Simon Marlow simonmar at microsoft.com
Wed Mar 16 05:25:09 EST 2005


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
> <package.conf.inplace Creating user package database in
> /org/buildd/.ghc/sparc-linux-6.4/package.conf 
> 
> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



More information about the Glasgow-haskell-users mailing list