summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorPaolo Capriotti <p.capriotti@gmail.com>2012-03-07 18:40:44 +0000
committerPaolo Capriotti <p.capriotti@gmail.com>2012-03-08 12:55:16 +0000
commitd6b1050d7e5db5a196a50bf3ad34ce310cb2387e (patch)
tree3fbf7580b25a7f26f04bb88198012d853596fef6 /utils
parentdfe536be7d5d662ae75671797750b487c1ef59b7 (diff)
downloadhaskell-d6b1050d7e5db5a196a50bf3ad34ce310cb2387e.tar.gz
ghc-pkg: make sure info messages go to stdout and errors to stderr (#3818)
Diffstat (limited to 'utils')
-rw-r--r--utils/ghc-pkg/Main.hs70
1 files changed, 40 insertions, 30 deletions
diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs
index 14664a8ada..e29301d933 100644
--- a/utils/ghc-pkg/Main.hs
+++ b/utils/ghc-pkg/Main.hs
@@ -611,7 +611,7 @@ readParseDatabase verbosity mb_user_conf use_cache path
Right tcache
| tcache >= tdir -> do
when (verbosity > Normal) $
- putStrLn ("using cache: " ++ cache)
+ infoLn ("using cache: " ++ cache)
pkgs <- myReadBinPackageDB cache
let pkgs' = map convertPackageInfoIn pkgs
mkPackageDB pkgs'
@@ -649,7 +649,7 @@ myReadBinPackageDB filepath = do
parseMultiPackageConf :: Verbosity -> FilePath -> IO [InstalledPackageInfo]
parseMultiPackageConf verbosity file = do
- when (verbosity > Normal) $ putStrLn ("reading package database: " ++ file)
+ when (verbosity > Normal) $ infoLn ("reading package database: " ++ file)
str <- readUTF8File file
let pkgs = map convertPackageInfoIn $ read str
Exception.evaluate pkgs
@@ -658,7 +658,7 @@ parseMultiPackageConf verbosity file = do
parseSingletonPackageConf :: Verbosity -> FilePath -> IO InstalledPackageInfo
parseSingletonPackageConf verbosity file = do
- when (verbosity > Normal) $ putStrLn ("reading package config: " ++ file)
+ when (verbosity > Normal) $ infoLn ("reading package config: " ++ file)
readUTF8File file >>= fmap fst . parsePackageInfo
cachefilename :: FilePath
@@ -767,13 +767,13 @@ registerPackage input verbosity my_flags auto_ghci_libs expand_env_vars update f
case input of
"-" -> do
when (verbosity >= Normal) $
- putStr "Reading package info from stdin ... "
+ info "Reading package info from stdin ... "
-- fix the encoding to UTF-8, since this is an interchange format
hSetEncoding stdin utf8
getContents
f -> do
when (verbosity >= Normal) $
- putStr ("Reading package info from " ++ show f ++ " ... ")
+ info ("Reading package info from " ++ show f ++ " ... ")
readUTF8File f
expanded <- if expand_env_vars then expandEnvVars s force
@@ -781,7 +781,7 @@ registerPackage input verbosity my_flags auto_ghci_libs expand_env_vars update f
(pkg, ws) <- parsePackageInfo expanded
when (verbosity >= Normal) $
- putStrLn "done."
+ infoLn "done."
-- report any warnings from the parse phase
_ <- reportValidateErrors [] ws
@@ -795,7 +795,7 @@ registerPackage input verbosity my_flags auto_ghci_libs expand_env_vars update f
let truncated_stack = dropWhile ((/= to_modify).location) db_stack
-- truncate the stack for validation, because we don't allow
-- packages lower in the stack to refer to those higher up.
- validatePackageConfig pkg_expanded truncated_stack auto_ghci_libs update force
+ validatePackageConfig pkg_expanded verbosity truncated_stack auto_ghci_libs update force
let
removes = [ RemovePackage p
| p <- packages db_to_operate_on,
@@ -850,11 +850,11 @@ changeDBDir verbosity cmds db = do
where
do_cmd (RemovePackage p) = do
let file = location db </> display (installedPackageId p) <.> "conf"
- when (verbosity > Normal) $ putStrLn ("removing " ++ file)
+ when (verbosity > Normal) $ infoLn ("removing " ++ file)
removeFileSafe file
do_cmd (AddPackage p) = do
let file = location db </> display (installedPackageId p) <.> "conf"
- when (verbosity > Normal) $ putStrLn ("writing " ++ file)
+ when (verbosity > Normal) $ infoLn ("writing " ++ file)
writeFileUtf8Atomic file (showInstalledPackageInfo p)
do_cmd (ModifyPackage p) =
do_cmd (AddPackage p)
@@ -863,7 +863,7 @@ updateDBCache :: Verbosity -> PackageDB -> IO ()
updateDBCache verbosity db = do
let filename = location db </> cachefilename
when (verbosity > Normal) $
- putStrLn ("writing cache " ++ filename)
+ infoLn ("writing cache " ++ filename)
writeBinaryFileAtomic filename (map convertPackageInfoOut (packages db))
`catchIO` \e ->
if isPermissionError e
@@ -1144,7 +1144,7 @@ describeField verbosity my_flags pkgarg fields expand_pkgroot = do
Nothing -> die ("unknown field: " ++ f)
Just fn -> do fns <- toFields fs
return (fn:fns)
- selectFields fns info = mapM_ (\fn->putStrLn (fn info)) fns
+ selectFields fns pinfo = mapM_ (\fn->putStrLn (fn pinfo)) fns
toField :: String -> Maybe (InstalledPackageInfo -> String)
-- backwards compatibility:
@@ -1181,7 +1181,7 @@ checkConsistency verbosity my_flags = do
let pkgs = allPackagesInStack db_stack
checkPackage p = do
- (_,es,ws) <- runValidate $ checkPackageConfig p db_stack False True
+ (_,es,ws) <- runValidate $ checkPackageConfig p verbosity db_stack False True
if null es
then do when (not simple_output) $ do
_ <- reportValidateErrors [] ws "" Nothing
@@ -1259,7 +1259,7 @@ convertPackageInfoIn
writeNewConfig :: Verbosity -> FilePath -> [InstalledPackageInfo] -> IO ()
writeNewConfig verbosity filename ipis = do
when (verbosity >= Normal) $
- hPutStr stdout "Writing new package config file... "
+ info "Writing new package config file... "
createDirectoryIfMissing True $ takeDirectory filename
let shown = concat $ intersperse ",\n "
$ map (show . convertPackageInfoOut) ipis
@@ -1270,7 +1270,7 @@ writeNewConfig verbosity filename ipis = do
then die (filename ++ ": you don't have permission to modify this file")
else ioError e
when (verbosity >= Normal) $
- hPutStrLn stdout "done."
+ infoLn "done."
-----------------------------------------------------------------------------
-- Sanity-check a new package config, and automatically build GHCi libs
@@ -1321,22 +1321,24 @@ reportValidateErrors es ws prefix mb_force = do
err = prefix ++ s
validatePackageConfig :: InstalledPackageInfo
+ -> Verbosity
-> PackageDBStack
-> Bool -- auto-ghc-libs
-> Bool -- update, or check
-> Force
-> IO ()
-validatePackageConfig pkg db_stack auto_ghci_libs update force = do
- (_,es,ws) <- runValidate $ checkPackageConfig pkg db_stack auto_ghci_libs update
+validatePackageConfig pkg verbosity db_stack auto_ghci_libs update force = do
+ (_,es,ws) <- runValidate $ checkPackageConfig pkg verbosity db_stack auto_ghci_libs update
ok <- reportValidateErrors es ws (display (sourcePackageId pkg) ++ ": ") (Just force)
when (not ok) $ exitWith (ExitFailure 1)
checkPackageConfig :: InstalledPackageInfo
+ -> Verbosity
-> PackageDBStack
-> Bool -- auto-ghc-libs
-> Bool -- update, or check
-> Validate ()
-checkPackageConfig pkg db_stack auto_ghci_libs update = do
+checkPackageConfig pkg verbosity db_stack auto_ghci_libs update = do
checkInstalledPackageId pkg db_stack update
checkPackageId pkg
checkDuplicates db_stack pkg update
@@ -1349,7 +1351,7 @@ checkPackageConfig pkg db_stack auto_ghci_libs update = do
mapM_ (checkFile True "haddock-interfaces") (haddockInterfaces pkg)
mapM_ (checkDirURL True "haddock-html") (haddockHTMLs pkg)
checkModules pkg
- mapM_ (checkHSLib (libraryDirs pkg) auto_ghci_libs) (hsLibraries pkg)
+ mapM_ (checkHSLib verbosity (libraryDirs pkg) auto_ghci_libs) (hsLibraries pkg)
-- ToDo: check these somehow?
-- extra_libraries :: [String],
-- c_includes :: [String],
@@ -1449,14 +1451,14 @@ checkDuplicateDepends deps
where
dups = [ p | (p:_:_) <- group (sort deps) ]
-checkHSLib :: [String] -> Bool -> String -> Validate ()
-checkHSLib dirs auto_ghci_libs lib = do
+checkHSLib :: Verbosity -> [String] -> Bool -> String -> Validate ()
+checkHSLib verbosity dirs auto_ghci_libs lib = do
let batch_lib_file = "lib" ++ lib ++ ".a"
m <- liftIO $ doesFileExistOnPath batch_lib_file dirs
case m of
Nothing -> verror ForceFiles ("cannot find " ++ batch_lib_file ++
" on library path")
- Just dir -> liftIO $ checkGHCiLib dir batch_lib_file lib auto_ghci_libs
+ Just dir -> liftIO $ checkGHCiLib verbosity dir batch_lib_file lib auto_ghci_libs
doesFileExistOnPath :: String -> [FilePath] -> IO (Maybe FilePath)
doesFileExistOnPath file path = go path
@@ -1479,9 +1481,9 @@ checkModules pkg = do
when (isNothing m) $
verror ForceFiles ("file " ++ file ++ " is missing")
-checkGHCiLib :: String -> String -> String -> Bool -> IO ()
-checkGHCiLib batch_lib_dir batch_lib_file lib auto_build
- | auto_build = autoBuildGHCiLib batch_lib_dir batch_lib_file ghci_lib_file
+checkGHCiLib :: Verbosity -> String -> String -> String -> Bool -> IO ()
+checkGHCiLib verbosity batch_lib_dir batch_lib_file lib auto_build
+ | auto_build = autoBuildGHCiLib verbosity batch_lib_dir batch_lib_file ghci_lib_file
| otherwise = return ()
where
ghci_lib_file = lib <.> "o"
@@ -1489,11 +1491,12 @@ checkGHCiLib batch_lib_dir batch_lib_file lib auto_build
-- automatically build the GHCi version of a batch lib,
-- using ld --whole-archive.
-autoBuildGHCiLib :: String -> String -> String -> IO ()
-autoBuildGHCiLib dir batch_file ghci_file = do
+autoBuildGHCiLib :: Verbosity -> String -> String -> String -> IO ()
+autoBuildGHCiLib verbosity dir batch_file ghci_file = do
let ghci_lib_file = dir ++ '/':ghci_file
batch_lib_file = dir ++ '/':batch_file
- hPutStr stderr ("building GHCi library " ++ ghci_lib_file ++ "...")
+ when (verbosity >= Normal) $
+ info ("building GHCi library " ++ ghci_lib_file ++ "...")
#if defined(darwin_HOST_OS)
r <- rawSystem "ld" ["-r","-x","-o",ghci_lib_file,"-all_load",batch_lib_file]
#elif defined(mingw32_HOST_OS)
@@ -1503,7 +1506,8 @@ autoBuildGHCiLib dir batch_file ghci_file = do
r <- rawSystem "ld" ["-r","-x","-o",ghci_lib_file,"--whole-archive",batch_lib_file]
#endif
when (r /= ExitSuccess) $ exitWith r
- hPutStrLn stderr (" done.")
+ when (verbosity >= Normal) $
+ infoLn (" done.")
-- -----------------------------------------------------------------------------
-- Searching for modules
@@ -1582,9 +1586,8 @@ die = dieWith 1
dieWith :: Int -> String -> IO a
dieWith ec s = do
- hFlush stdout
prog <- getProgramName
- hPutStrLn stderr (prog ++ ": " ++ s)
+ reportError (prog ++ ": " ++ s)
exitWith (ExitFailure ec)
dieOrForceAll :: Force -> String -> IO ()
@@ -1594,6 +1597,13 @@ dieOrForceAll _other s = dieForcible s
warn :: String -> IO ()
warn = reportError
+-- send info messages to stdout
+infoLn :: String -> IO ()
+infoLn = putStrLn
+
+info :: String -> IO ()
+info = putStr
+
ignoreError :: String -> IO ()
ignoreError s = reportError (s ++ " (ignoring)")