diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Config.hs b/cabal-install/src/Network/Hackage/CabalInstall/Config.hs index 50bdb712003f2e5a181e4451bab63117b2a5f08c..0fb2fcdc6ff2a74e424c06abea065c0d1e1fe0b5 100644 --- a/cabal-install/src/Network/Hackage/CabalInstall/Config.hs +++ b/cabal-install/src/Network/Hackage/CabalInstall/Config.hs @@ -181,7 +181,8 @@ loadConfig configFile = minp <- readFileIfExists configFile case minp of Nothing -> do hPutStrLn stderr $ "Config file " ++ configFile ++ " not found." - writeDefaultConfigFile configFile + hPutStrLn stderr $ "Writing default configuration to " ++ configFile ++ "." + writeDefaultConfigFile configFile defaultConf return defaultConf Just inp -> case parseBasicStanza configFieldDescrs defaultConf inp of ParseOk ws dummyConf -> @@ -200,12 +201,20 @@ loadConfig configFile = return defaultConf -- FIXME: finish this -writeDefaultConfigFile :: FilePath -> IO () -writeDefaultConfigFile file = - do writeFile file "" +writeDefaultConfigFile :: FilePath -> ConfigFlags -> IO () +writeDefaultConfigFile file cfg = + writeFile file $ showFields configWriteFieldDescrs cfg +-- | All config file fields. configFieldDescrs :: [FieldDescr ConfigFlags] configFieldDescrs = + [ + ] ++ configWriteFieldDescrs + +-- | The subset of the config file fields that we write out +-- if the config file is missing. +configWriteFieldDescrs :: [FieldDescr ConfigFlags] +configWriteFieldDescrs = [ simpleField "compiler" (text . show) parseCompilerFlavor configCompiler (\c cfg -> cfg { configCompiler = c }) @@ -215,7 +224,7 @@ configFieldDescrs = , simpleField "prefix" (text . show) (readS_to_P reads) (prefixDirTemplate . configInstallDirs) (\d -> setInstallDir (\ds -> ds { prefixDirTemplate = d })) - ] + ] setInstallDir :: (InstallDirTemplates -> InstallDirTemplates) -> ConfigFlags -> ConfigFlags setInstallDir f cfg = cfg { configInstallDirs = f (configInstallDirs cfg) } diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs b/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs index 1cbb9589a9d7d55d69d14094b93b8388efb83920..e400559f69bf296eb2483fe3752a71d4fb45ef64 100644 --- a/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs +++ b/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs @@ -10,6 +10,7 @@ import Control.Monad (foldM, guard) import Data.Char (isSpace) import Data.Maybe (listToMaybe) import System.IO.Error (isDoesNotExistError) +import Text.PrettyPrint.HughesPJ isVerbose cfg = configVerbose cfg >= verbose @@ -59,3 +60,7 @@ setField _ x s = lookupFieldDescr :: [FieldDescr a] -> String -> Maybe (FieldDescr a) lookupFieldDescr fs n = listToMaybe [f | f@(FieldDescr name _ _) <- fs, name == n] + + +showFields :: [FieldDescr a] -> a -> String +showFields fs x = render $ vcat [ text name <> text ":" <+> get x | FieldDescr name get _ <- fs]