summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2009-08-11 21:25:59 +0000
committerIan Lynagh <igloo@earth.li>2009-08-11 21:25:59 +0000
commitd4f9480c7e7bf8167a97ff964f9d85400398c5c4 (patch)
treef8ed0c1ddc3fe2e3dd9b370e8ff8ab0ce61fb30a /utils
parent0be79fa683f2caabb7c3a853f1f893e57e4abd34 (diff)
downloadhaskell-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.hs18
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