diff options
author | Ian Lynagh <igloo@earth.li> | 2009-08-11 21:25:59 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2009-08-11 21:25:59 +0000 |
commit | d4f9480c7e7bf8167a97ff964f9d85400398c5c4 (patch) | |
tree | f8ed0c1ddc3fe2e3dd9b370e8ff8ab0ce61fb30a /utils | |
parent | 0be79fa683f2caabb7c3a853f1f893e57e4abd34 (diff) | |
download | haskell-d4f9480c7e7bf8167a97ff964f9d85400398c5c4.tar.gz |
Check Cabal packages when validating
This checks that hackage would accept the packages.
Currently warnings are printed, but don't result in failure.
Diffstat (limited to 'utils')
-rw-r--r-- | utils/ghc-cabal/ghc-cabal.hs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/utils/ghc-cabal/ghc-cabal.hs b/utils/ghc-cabal/ghc-cabal.hs index a1bdf66ab6..8c9612f0ff 100644 --- a/utils/ghc-cabal/ghc-cabal.hs +++ b/utils/ghc-cabal/ghc-cabal.hs @@ -3,6 +3,7 @@ module Main (main) where import qualified Distribution.ModuleName as ModuleName import Distribution.PackageDescription +import Distribution.PackageDescription.Check hiding (doesFileExist) import Distribution.PackageDescription.Configuration import Distribution.PackageDescription.Parse import Distribution.Simple @@ -17,6 +18,7 @@ import Distribution.Verbosity import qualified Distribution.InstalledPackageInfo as Installed import qualified Distribution.Simple.PackageIndex as PackageIndex +import Data.List import Data.Maybe import System.IO import System.Directory @@ -29,6 +31,8 @@ main = do args <- getArgs case args of "haddock" : distDir : dir : args' -> runHaddock distDir dir args' + "check" : dir : [] -> + doCheck dir "install" : ghcpkg : ghcpkgconfig : directory : distDir : myDestDir : myPrefix : myLibdir : myDocdir : args' -> doInstall ghcpkg ghcpkgconfig directory distDir @@ -64,6 +68,20 @@ withCurrentDirectory directory io userHooks :: UserHooks userHooks = autoconfUserHooks +doCheck :: FilePath -> IO () +doCheck directory + = withCurrentDirectory directory + $ do let verbosity = normal + gpdFile <- defaultPackageDesc verbosity + gpd <- readPackageDescription verbosity gpdFile + case partition isFailure $ checkPackage gpd Nothing of + ([], []) -> return () + ([], warnings) -> mapM_ print warnings + (errs, _) -> do mapM_ print errs + exitWith (ExitFailure 1) + where isFailure (PackageDistSuspicious {}) = False + isFailure _ = True + runHaddock :: FilePath -> FilePath -> [String] -> IO () runHaddock distdir directory args = withCurrentDirectory directory |