hackport 0.2.17 → 0.2.18
raw patch · 11 files changed
+154/−65 lines, 11 filesdep +HUnitdep ~basedep ~xml
Dependencies added: HUnit
Dependency ranges changed: base, xml
Files
- Cabal2Ebuild.hs +4/−7
- Merge.hs +2/−0
- Merge/Dependencies.hs +38/−14
- Portage/Dependency.hs +48/−15
- Portage/EBuild.hs +3/−3
- Portage/GHCCore.hs +12/−13
- Portage/Version.hs +8/−0
- README.rst +4/−4
- Status.hs +5/−5
- hackport.cabal +19/−1
- tests/resolveCat.hs +11/−3
Cabal2Ebuild.hs view
@@ -37,7 +37,6 @@ import Data.Char (toLower,isUpper) import Portage.Dependency-import Portage.Use import qualified Portage.PackageId as Portage import qualified Portage.EBuild as Portage import qualified Portage.Resolve as Portage@@ -62,9 +61,11 @@ ++ maybe [] (const (["lib","profile","haddock","hoogle"] ++ if cabalPkgName == "hscolour" then [] else ["hscolour"]) ) (Cabal.library pkg) -- hscolour can't colour its own sources+ ++ (if hasTests then ["test-suite"] else []) } where cabalPkgName = display $ Cabal.pkgName (Cabal.package pkg) hasExe = (not . null) (Cabal.executables pkg) + hasTests = (not . null) (Cabal.testSuites pkg) thisHomepage = if (null $ Cabal.homepage pkg) then E.homepage E.ebuildTemplate else Cabal.homepage pkg@@ -73,7 +74,7 @@ convertDependencies overlay category = concatMap (convertDependency overlay category) convertDependency :: O.Overlay -> Portage.Category -> Cabal.Dependency -> [Dependency]-convertDependency overlay _category (Cabal.Dependency pname@(Cabal.PackageName _name) _)+convertDependency _overlay _category (Cabal.Dependency pname@(Cabal.PackageName _name) _) | pname `elem` coreLibs = [] -- no explicit dep on core libs convertDependency overlay category (Cabal.Dependency pname versionRange) = convert versionRange@@ -90,14 +91,10 @@ )(\v -> [OrLaterVersionOf (fromCabalVersion v) pn []] -- ^ @\">= v\"@ )(\v -> [OrEarlierVersionOf (fromCabalVersion v) pn []] -- ^ @\"<= v\"@ )(\v _ -> [ThisMajorOf (fromCabalVersion v) pn []] -- ^ @\"== v.*\"@ wildcard. (incl lower, excl upper)- )(\g1 g2 -> [DependEither (flatten g1 ++ flatten g2) ] -- ^ @\"_ || _\"@ union+ )(\g1 g2 -> [DependEither (g1 ++ g2)] -- ^ @\"_ || _\"@ union )(\r1 r2 -> r1 ++ r2 -- ^ @\"_ && _\"@ intersection )(\dp -> [AllOf dp ] -- ^ @\"(_)\"@ parentheses )- where- flatten :: [Dependency] -> [[Dependency]]- flatten [DependEither ds] = concatMap flatten ds- flatten other = [other] coreLibs :: [Cabal.PackageName] coreLibs = map Cabal.PackageName
Merge.hs view
@@ -176,6 +176,8 @@ debug verbosity ("Selected flags: " ++ show flags) info verbosity ("Guessing GHC version: " ++ maybe "could not guess" (display.fst) mminimumGHC)+ forM_ excludePkgs $+ \(PackageName name) -> info verbosity $ "Excluded packages (come with ghc): " ++ name let ebuild = (\e -> e { E.depend = Merge.dep edeps } ) . (\e -> e { E.depend_extra = Merge.dep_e edeps } )
Merge/Dependencies.hs view
@@ -55,6 +55,8 @@ , pkgconfigDepends , hasLibs , specVersion+ , TestSuite(..)+ , targetBuildDepends ) import Data.Maybe ( isNothing ) import Data.List ( nub )@@ -96,12 +98,16 @@ resolveDependencies overlay pkg mcompiler = edeps {- dep = Portage.simplify_deps ( dep edeps),- rdep = Portage.simplify_deps (rdep edeps)+ dep = dep2,+ rdep = rdep2 -- todo: if rdep includes cabal or ghc, make sure it's the same -- version as in dep } where+ dep1 = Portage.simplify_deps ( dep edeps)+ dep2 = Portage.simplifyUseDeps dep1 (dep1++rdep2)+ rdep1 = Portage.simplify_deps (rdep edeps)+ rdep2 = Portage.simplifyUseDeps rdep1 rdep1 compiler = maybe (fst GHCCore.defaultGHC) id mcompiler hasBuildableExes p = any (buildable . buildInfo) . executables $ p@@ -109,6 +115,9 @@ haskell_deps | treatAsLibrary = add_profile $ haskellDependencies overlay pkg | otherwise = haskellDependencies overlay pkg+ test_deps+ | (not . null) (testSuites pkg) = testDependencies overlay pkg+ | otherwise = [] -- tests not enabled cabal_dep = cabalDependency overlay pkg compiler ghc_dep = compilerIdToDependency compiler extra_libs = findCLibs pkg@@ -118,7 +127,8 @@ | treatAsLibrary = emptyEDep { dep = cabal_dep- : build_tools,+ : build_tools+ ++ test_deps, dep_e = [ "${RDEPEND}" ], rdep = ghc_dep : haskell_deps@@ -130,13 +140,24 @@ dep = ghc_dep : cabal_dep : build_tools- ++ haskell_deps,+ ++ haskell_deps+ ++ test_deps, dep_e = [ "${RDEPEND}" ], rdep = extra_libs ++ pkg_config } add_profile = map (flip Portage.addDepUseFlag (Portage.mkQUse "profile")) +---------------------------------------------------------------+-- Test-suite dependencies+--------------------------------------------------------------- +testDependencies :: Portage.Overlay -> PackageDescription -> [Portage.Dependency]+testDependencies overlay pkg@(PackageDescription { package = Cabal.PackageIdentifier { Cabal.pkgName = Cabal.PackageName name}}) =+ [Portage.DependIfUse (Portage.UseFlag "test") (Portage.AllOf $ Portage.simplify_deps deps)]+ where cabalDeps = concat $ map targetBuildDepends $ map testBuildInfo (testSuites pkg)+ cabalDeps' = filter (\(Cabal.Dependency (Cabal.PackageName pname) _) -> pname /= name) cabalDeps+ deps = C2E.convertDependencies overlay (Portage.Category "dev-haskell") cabalDeps'+ --------------------------------------------------------------- -- Haskell packages ---------------------------------------------------------------@@ -204,12 +225,13 @@ m = [ ("z", Portage.AnyVersionOf (Portage.mkPackageName "sys-libs" "zlib") []) , ("bz2", Portage.AnyVersionOf (Portage.mkPackageName "sys-libs" "bzlib") []) , ("mysqlclient", Portage.LaterVersionOf (Portage.Version [4,0] Nothing [] 0) (Portage.mkPackageName "virtual" "mysql") [])- , ("pq", Portage.LaterVersionOf (Portage.Version [7] Nothing [] 0) (Portage.mkPackageName "virtual" "postgresql-base") [])+ , ("pq", Portage.LaterVersionOf (Portage.Version [7] Nothing [] 0) (Portage.mkPackageName "dev-db" "postgresql-base") []) , ("ev", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "libev") []) , ("expat", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "expat") []) , ("curl", Portage.AnyVersionOf (Portage.mkPackageName "net-misc" "curl") []) , ("xml2", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "libxml2") []) , ("mecab", Portage.AnyVersionOf (Portage.mkPackageName "app-text" "mecab") [])+ , ("zmq", Portage.AnyVersionOf (Portage.mkPackageName "net-libs" "zeromq") []) ] ---------------------------------------------------------------@@ -236,6 +258,7 @@ [ ("happy", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "happy") []) , ("alex", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "alex") []) , ("c2hs", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "c2hs") [])+ , ("cabal-install", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "cabal-install") []) , ("gtk2hsTypeGen", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "gtk2hs-buildtools") []) , ("gtk2hsHookGenerator", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "gtk2hs-buildtools") []) , ("gtk2hsC2hs", Portage.AnyVersionOf (Portage.mkPackageName "dev-haskell" "gtk2hs-buildtools") [])@@ -269,20 +292,20 @@ resolvePkgConfig :: Portage.Overlay -> Cabal.Dependency -> Maybe Portage.Dependency resolvePkgConfig overlay (Cabal.Dependency (Cabal.PackageName pn) _cabalVersion) = do (cat,portname) <- lookup pn table- return . head $ (C2E.convertDependency overlay (Portage.Category cat) (Cabal.Dependency (Cabal.PackageName portname) _cabalVersion))+ return $ Portage.AnyVersionOf (Portage.mkPackageName cat portname) [] table :: [(String, (String, String))] table = [("gconf-2.0", ("gnome-base", "gconf")) - ,("gio-2.0", ("dev-libs", "glib"))- ,("gio-unix-2.0", ("dev-libs", "glib"))- ,("glib-2.0", ("dev-libs", "glib"))- ,("gmodule-2.0", ("dev-libs", "glib"))- ,("gmodule-export-2.0", ("dev-libs", "glib"))- ,("gmodule-no-export-2.0", ("dev-libs", "glib"))- ,("gobject-2.0", ("dev-libs", "glib"))- ,("gthread-2.0", ("dev-libs", "glib")) -- should be slot 2+ ,("gio-2.0", ("dev-libs", "glib:2"))+ ,("gio-unix-2.0", ("dev-libs", "glib:2"))+ ,("glib-2.0", ("dev-libs", "glib:2"))+ ,("gmodule-2.0", ("dev-libs", "glib:2"))+ ,("gmodule-export-2.0", ("dev-libs", "glib:2"))+ ,("gmodule-no-export-2.0", ("dev-libs", "glib:2"))+ ,("gobject-2.0", ("dev-libs", "glib:2"))+ ,("gthread-2.0", ("dev-libs", "glib:2")) ,("gtk+-2.0", ("x11-libs", "gtk+")) -- should be slot 2 ,("gdk-2.0", ("x11-libs", "gtk+"))@@ -331,5 +354,6 @@ ,("curl", ("net-misc", "curl")) ,("libxml2", ("dev-libs", "libxml2"))+ ,("libgsasl", ("virtual", "gsasl")) ]
Portage/Dependency.hs view
@@ -1,6 +1,7 @@ module Portage.Dependency ( Dependency(..), simplify_deps,+ simplifyUseDeps, addDepUseFlag ) where @@ -13,7 +14,7 @@ import qualified Text.PrettyPrint as Disp import Text.PrettyPrint ( (<>), hsep ) -import Data.Maybe ( fromJust, catMaybes )+import Data.Maybe ( fromJust, catMaybes, mapMaybe ) import Data.List ( nub, groupBy, partition, sortBy ) import Data.Ord (comparing) @@ -23,10 +24,10 @@ | EarlierVersionOf Version PackageName [UseFlag] -- <package-version | OrLaterVersionOf Version PackageName [UseFlag] -- >=package-version | OrEarlierVersionOf Version PackageName [UseFlag] -- <=package-version- | DependEither [[Dependency]] -- || ( depend_group1 ..depend_groupN )- | DependIfUse UseFlag Dependency -- use? ( depend )+ | DependEither [Dependency] -- || ( depend1 depend2 ... )+ | DependIfUse UseFlag Dependency -- use? ( depend ) | ThisMajorOf Version PackageName [UseFlag] -- =package-version*- | AllOf [Dependency] -- ( package-version* )+ | AllOf [Dependency] -- ( depend1 depend2 ... ) deriving (Eq,Show) instance Text Dependency where@@ -37,21 +38,23 @@ showDepend :: Dependency -> Disp.Doc showDepend (AnyVersionOf p u) = disp p <> dispUses u -showDepend (ThisVersionOf v p u) = Disp.char '~' <> disp p <-> disp v { versionRevision = 0 }<>dispUses u+showDepend (ThisVersionOf v p u) = Disp.char '~' <> disp p <-> disp v { versionRevision = 0 } <> dispUses u showDepend (LaterVersionOf v p u) = Disp.char '>' <> disp p <-> disp v <> dispUses u showDepend (EarlierVersionOf v p u) = Disp.char '<' <> disp p <-> disp v <> dispUses u showDepend (OrLaterVersionOf v p u) = Disp.text ">=" <> disp p <-> disp v <> dispUses u showDepend (OrEarlierVersionOf v p u) = Disp.text "<=" <> disp p <-> disp v <> dispUses u-showDepend (DependEither dep_groups0)- = Disp.text "|| " <> spaceParens dep_groups- where dep_groups = map (spaceParens . map disp) dep_groups0- spaceParens ds = Disp.parens (Disp.space <> Disp.hsep ds <> Disp.space)-showDepend (DependIfUse useflag dep@(DependEither _))- = disp useflag <> Disp.text "? " <> disp dep -showDepend (DependIfUse useflag dep)- = disp useflag <> Disp.text "? " <> Disp.parens (disp dep)+showDepend (DependEither dp ) = Disp.text "|| ( " <> hsep (map showDepend dp) <> Disp.text " )"+showDepend (DependIfUse useflag dep) = disp useflag <> Disp.text "? " <> pp_deps dep+ where -- special case to avoid double braces: test? ( ( ) )+ pp_deps (AllOf _) = disp dep+ pp_deps _ = Disp.parens (Disp.text " " <> disp dep <> Disp.text " ") showDepend (ThisMajorOf v p u) = Disp.char '=' <> disp p <-> disp v <> Disp.char '*' <> dispUses u-showDepend (AllOf dp ) = Disp.text "( " <> hsep (map showDepend dp) <> Disp.text " )"+showDepend (AllOf []) = Disp.empty+showDepend (AllOf (d:dp) ) =+ Disp.text "( " <> showDepend d <> line+ <> Disp.hcat (map (\x -> Disp.text "\t\t\t" <> (showDepend x) <> line) dp)+ <> Disp.text "\t\t)"+ where line = Disp.char '\n' {- Here goes code for dependencies simplification -} @@ -148,6 +151,7 @@ cmpMaybe _ _ = False -- getPackage :: Dependency -> Maybe PackageName+getPackage (AllOf _dependency) = Nothing getPackage (AnyVersionOf package _uses) = Just package getPackage (ThisVersionOf _version package _uses) = Just package getPackage (LaterVersionOf _version package _uses) = Just package@@ -159,6 +163,7 @@ getPackage (ThisMajorOf _version package _uses) = Just package getUses :: Dependency -> Maybe [UseFlag]+getUses (AllOf _d) = Nothing getUses (AnyVersionOf _p u) = Just u getUses (ThisVersionOf _v _p u) = Just u getUses (LaterVersionOf _v _p u) = Just u@@ -175,6 +180,7 @@ -- addDepUseFlag :: Dependency -> UseFlag -> Dependency+addDepUseFlag (AllOf d) n = AllOf $ map (flip addDepUseFlag n) d addDepUseFlag (AnyVersionOf p u) n = AnyVersionOf p (n:u) addDepUseFlag (ThisVersionOf v p u) n = ThisVersionOf v p (n:u) addDepUseFlag (LaterVersionOf v p u) n = LaterVersionOf v p (n:u)@@ -182,5 +188,32 @@ addDepUseFlag (OrLaterVersionOf v p u) n = OrLaterVersionOf v p (n:u) addDepUseFlag (OrEarlierVersionOf v p u) n = OrEarlierVersionOf v p (n:u) addDepUseFlag (ThisMajorOf v p u) n = ThisMajorOf v p (n:u)-addDepUseFlag (DependEither d) n = DependEither $ map (\d' -> map (flip addDepUseFlag n) d') d+addDepUseFlag (DependEither d) n = DependEither $ map (flip addDepUseFlag n) d addDepUseFlag (DependIfUse u d) n = DependIfUse u (addDepUseFlag d n)++--+-- | remove all Use dependencies that overlap with normal dependencies+simplifyUseDeps :: [Dependency] -- list where use deps is taken+ -> [Dependency] -- list where common deps is taken+ -> [Dependency] -- result deps+simplifyUseDeps ds cs =+ let (u,o) = partition isUseDep ds+ c = mapMaybe getPackage cs+ in (mapMaybe (intersectD c) u)++o++intersectD :: [PackageName] -> Dependency -> Maybe Dependency+intersectD fs (DependIfUse u d) = intersectD fs d >>= Just . DependIfUse u+intersectD fs (DependEither ds) =+ let ds' = mapMaybe (intersectD fs) ds+ in if null ds' then Nothing else Just (DependEither ds')+intersectD fs (AllOf ds) =+ let ds' = mapMaybe (intersectD fs) ds+ in if null ds' then Nothing else Just (AllOf ds')+intersectD fs x =+ let pkg = fromJust $ getPackage x -- this is unsafe but will save from error later+ in if any (==pkg) fs then Nothing else Just x++isUseDep :: Dependency -> Bool+isUseDep (DependIfUse _ _) = True+isUseDep _ = False+--
Portage/EBuild.hs view
@@ -78,11 +78,11 @@ showEBuild ebuild = ss "# Copyright 1999-2012 Gentoo Foundation". nl. ss "# Distributed under the terms of the GNU General Public License v2". nl.- ss "# $Header: $". nl.- nl.- ss ("# ebuild generated by hackport " ++ hackportVersion ebuild). nl.+ ss "# $Header: $". nl. nl. ss "EAPI=4". nl.+ nl.+ ss ("# ebuild generated by hackport " ++ hackportVersion ebuild). nl. nl. ss "CABAL_FEATURES=". quote' (sepBy " " $ features ebuild). nl. ss "inherit haskell-cabal". nl.
Portage/GHCCore.hs view
@@ -139,8 +139,7 @@ , p "old-time" [1,0,0,6] , p "pretty" [1,0,1,2] , p "process" [1,0,1,4]- , p "random" [1,0,0,3]- , p "syb" [0,2,2] -- not distributed with ghc-7, but ghc-7 PDEPENDs on it+-- , p "random" [1,0,0,3] -- will not be shipped starting from ghc-7.2 , p "template-haskell" [2,5,0,0] -- , p "time" [1,2,0,3] package is upgradeable , p "unix" [2,4,1,0]@@ -166,8 +165,8 @@ , p "old-time" [1,0,0,5] , p "pretty" [1,0,1,1] , p "process" [1,0,1,3]- , p "random" [1,0,0,2]- , p "syb" [0,1,0,2]+-- , p "random" [1,0,0,2] -- will not be shipped starting from ghc-7.2+-- , p "syb" [0,1,0,2] -- not distributed with ghc-7 , p "template-haskell" [2,4,0,1] -- , p "time" [1,1,4] package is upgradeable , p "unix" [2,4,0,2]@@ -193,8 +192,8 @@ , p "old-time" [1,0,0,4] , p "pretty" [1,0,1,1] , p "process" [1,0,1,2]- , p "random" [1,0,0,2]- , p "syb" [0,1,0,2]+-- , p "random" [1,0,0,2] -- will not be shipped starting from ghc-7.2+-- , p "syb" [0,1,0,2] -- not distributed with ghc-7 , p "template-haskell" [2,4,0,1] -- , p "time" [1,1,4] package is upgradeable , p "unix" [2,4,0,1]@@ -220,8 +219,8 @@ , p "old-time" [1,0,0,3] , p "pretty" [1,0,1,1] , p "process" [1,0,1,2]- , p "random" [1,0,0,2]- , p "syb" [0,1,0,2]+-- , p "random" [1,0,0,2] -- will not be shipped starting from ghc-7.2+-- , p "syb" [0,1,0,2] -- not distributed with ghc-7 , p "template-haskell" [2,4,0,0] -- , p "time" [1,1,4] package is upgradeable , p "unix" [2,4,0,0]@@ -246,8 +245,8 @@ , p "packedstring" [0,1,0,1] , p "pretty" [1,0,1,0] , p "process" [1,0,1,1]- , p "random" [1,0,0,1]- , p "syb" [0,1,0,1]+-- , p "random" [1,0,0,1] -- will not be shipped starting from ghc-7.2+-- , p "syb" [0,1,0,1] -- not distributed with ghc-7 , p "template-haskell" [2,3,0,1] -- , p "time" [1,1,4] package is upgradeable , p "unix" [2,3,2,0]@@ -271,8 +270,8 @@ , p "packedstring" [0,1,0,1] , p "pretty" [1,0,1,0] , p "process" [1,0,1,0]- , p "random" [1,0,0,1]- , p "syb" [0,1,0,0]+-- , p "random" [1,0,0,1] -- will not be shipped starting from ghc-7.2+-- , p "syb" [0,1,0,0] -- not distributed with ghc-7 , p "template-haskell" [2,3,0,0] , p "unix" [2,3,1,0] ]@@ -293,7 +292,7 @@ , p "packedstring" [0,1,0,0] , p "pretty" [1,0,0,0] , p "process" [1,0,0,0]- , p "random" [1,0,0,0]+-- , p "random" [1,0,0,0] -- will not be shipped starting from ghc-7.2 -- , p "readline" [1,0,1,0] , p "template-haskell" [2,2,0,0] , p "unix" [2,3,0,0]
Portage/Version.hs view
@@ -14,6 +14,7 @@ Suffix(..), fromCabalVersion, toCabalVersion,+ is_live ) where import qualified Distribution.Version as Cabal@@ -31,6 +32,13 @@ , versionRevision :: Int -- revision, 0 means none } deriving (Eq, Ord, Show, Read)++-- foo-9999* is treated as live ebuild+is_live :: Version -> Bool+is_live v =+ case versionNumber v of+ [n] | n >= 9999 && (all (== '9') . show) n -> True+ _ -> False data Suffix = Alpha Int | Beta Int | Pre Int | RC Int | P Int deriving (Eq, Ord, Show, Read)
README.rst view
@@ -121,10 +121,10 @@ - the ebuilds differ, or - the overlay has a more recent version - 'hackport make-ebuild <path/to/package.cabal>'- Generates standalone .ebuild file from .cabal spec and stores result in same- directory.- Option is useful for packages not-on-hackage and for debug purposes.+ 'hackport make-ebuild <category> <path/to/package.cabal>'+ Generates standalone .ebuild file from .cabal spec and stores result+ to the overlay into <category>/<package>+ Option is useful for not-on-hackage packages and for debug purposes. -------
Status.hs view
@@ -8,7 +8,7 @@ import AnsiColor -import qualified Portage.Version as V (versionNumber)+import qualified Portage.Version as V (is_live) import Portage.Overlay import Portage.PackageId@@ -176,10 +176,10 @@ case st of HackageOnly _ -> False _ -> True- -- treat versionNumber=[9999*] as oldest version not avoid masking hackage releases- mangle_live_versions v = case V.versionNumber v of- [n] | n >= 9999 && (all (== '9') . show) n -> v {versionNumber=[-1]}- _ -> v+ -- treat live as oldest version not avoid masking hackage releases+ mangle_live_versions v+ | V.is_live v = v {versionNumber=[-1]}+ | otherwise = v latestVersion = List.maximumBy (compare `on` mangle_live_versions . pkgVersion . ebuildId . fromStatus) sts in case latestVersion of HackageOnly _ | not (null inEbuilds) -> Just sts
hackport.cabal view
@@ -1,5 +1,5 @@ Name: hackport-Version: 0.2.17+Version: 0.2.18 License: GPL License-file: LICENSE Author: Henning Günther, Duncan Coutts, Lennart Kolmodin@@ -122,3 +122,21 @@ ghc-options: -Wall other-modules: Portage.GHCCore++Test-Suite test-resolve-category+ Type: exitcode-stdio-1.0+ Default-Language: Haskell98+ Main-Is: tests/resolveCat.hs+ Hs-Source-Dirs: ., cabal/cabal, cabal/cabal-install+ Build-Depends: base >= 3 && < 5,+ bytestring,+ containers,+ directory,+ extensible-exceptions,+ filepath,+ HUnit,+ mtl,+ pretty,+ process,+ unix,+ xml
tests/resolveCat.hs view
@@ -1,11 +1,14 @@-import Test.HUnit+import Control.Monad (when) +import qualified Distribution.Package as Cabal+ import qualified Portage.Overlay as Portage import qualified Portage.Resolve as Portage import qualified Portage.PackageId as Portage import qualified Portage.Host as Portage -import qualified Distribution.Package as Cabal+import System.Exit (exitFailure)+import Test.HUnit tests = TestList [ TestLabel "resolve cabal" (test_resolveCategory "dev-haskell" "cabal") , TestLabel "resolve ghc" (test_resolveCategory "dev-lang" "ghc")@@ -20,4 +23,9 @@ expected = Just (Portage.PackageName (Portage.Category cat) cabal) assertEqual ("expecting to find package " ++ pkg) hits expected -main = runTestTT tests+something_broke :: Counts -> Bool+something_broke stats = errors stats + failures stats > 0++main =+ do stats <- runTestTT tests+ when (something_broke stats) exitFailure