diff --git a/Stackage/Build.hs b/Stackage/Build.hs index 5579ce8..0b48111 100644 --- a/Stackage/Build.hs +++ b/Stackage/Build.hs @@ -4,31 +4,17 @@ module Stackage.Build , BuildSettings (..) ) where -import Control.Exception (assert) -import Control.Monad (unless, when) -import qualified Data.Map as Map -import Data.Maybe (mapMaybe) -import Data.Set (empty) -import qualified Data.Set as Set -import Distribution.Text (simpleParse) -import Distribution.Version (withinRange) +import Control.Monad (unless) import Prelude hiding (pi) -import Stackage.CheckPlan import Stackage.Config import Stackage.InstallInfo -import Stackage.Tarballs -import Stackage.Test import Stackage.Types import Stackage.Util -import System.Directory (canonicalizePath, - createDirectoryIfMissing, - doesDirectoryExist) import System.Exit (ExitCode (ExitSuccess), exitWith) import System.IO (IOMode (WriteMode), hPutStrLn, withBinaryFile) -import System.Process (rawSystem, readProcess, runProcess, +import System.Process (rawSystem, runProcess, waitForProcess) -import Stackage.Select (select) import Stackage.CheckCabalVersion (checkCabalVersion) defaultBuildSettings :: BuildSettings @@ -74,10 +60,10 @@ build settings' bp = do ] hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args)) runCabal args handle - ec1 <- waitForProcess ph1 - unless (ec1 == ExitSuccess) $ do + ec2 <- waitForProcess ph1 + unless (ec2 == ExitSuccess) $ do putStrLn "Building of build tools failed, please see build-tools.log" - exitWith ec1 + exitWith ec2 putStrLn "Build tools built" ph <- withBinaryFile "build.log" WriteMode $ \handle -> do @@ -96,33 +82,3 @@ build settings' bp = do unless (ec == ExitSuccess) $ do putStrLn "Build failed, please see build.log" exitWith ec - --- | Get all of the build tools required. -iiBuildTools :: InstallInfo -> [String] -iiBuildTools InstallInfo { iiPackageDB = PackageDB m, iiPackages = packages } = - -- FIXME possible improvement: track the dependencies between the build - -- tools themselves, and install them in the correct order. - map unPackageName - $ filter (flip Set.notMember coreTools) - $ mapMaybe (flip Map.lookup buildToolMap) - $ Set.toList - $ Set.unions - $ map piBuildTools - $ Map.elems - $ Map.filterWithKey isSelected m - where - unPackageName (PackageName pn) = pn - isSelected name _ = name `Set.member` selected - selected = Set.fromList $ Map.keys packages - - -- Build tools shipped with GHC which we should not attempt to build - -- ourselves. - coreTools = Set.fromList $ map PackageName $ words "hsc2hs" - - -- The map from build tool name to the package it comes from. - buildToolMap = Map.unions $ map toBuildToolMap $ Map.toList m - toBuildToolMap :: (PackageName, PackageInfo) -> Map Executable PackageName - toBuildToolMap (pn, pi) = Map.unions - $ map (flip Map.singleton pn) - $ Set.toList - $ piExecs pi diff --git a/Stackage/BuildPlan.hs b/Stackage/BuildPlan.hs index 3e76c35..7a11b53 100644 --- a/Stackage/BuildPlan.hs +++ b/Stackage/BuildPlan.hs @@ -9,8 +9,6 @@ import Stackage.Types import qualified Data.Map as Map import qualified Data.Set as Set import Distribution.Text (simpleParse, display) -import Distribution.Package (PackageName (..)) -import Control.Applicative ((<$>), (<*>)) readBuildPlan :: FilePath -> IO BuildPlan readBuildPlan fp = do @@ -76,6 +74,7 @@ takeWord s = if null s' then Right (x', y) else Left $ "Unconsumed input in takeWord call" + (_, []) -> Left "takeWord failed" instance AsString SelectedPackageInfo where toString SelectedPackageInfo {..} = unwords diff --git a/Stackage/CheckCabalVersion.hs b/Stackage/CheckCabalVersion.hs index f942f79..2713aab 100644 --- a/Stackage/CheckCabalVersion.hs +++ b/Stackage/CheckCabalVersion.hs @@ -3,28 +3,10 @@ module Stackage.CheckCabalVersion ) where import Control.Exception (assert) -import Control.Monad (unless, when) -import qualified Data.Map as Map -import Data.Maybe (mapMaybe) -import Data.Set (empty) -import qualified Data.Set as Set import Distribution.Text (simpleParse) import Distribution.Version (withinRange) import Prelude hiding (pi) -import Stackage.Config -import Stackage.InstallInfo -import Stackage.Tarballs -import Stackage.Test -import Stackage.Types -import Stackage.Util -import System.Directory (canonicalizePath, - createDirectoryIfMissing, - doesDirectoryExist) -import System.Exit (ExitCode (ExitSuccess), exitWith) -import System.IO (IOMode (WriteMode), hPutStrLn, - withBinaryFile) -import System.Process (rawSystem, readProcess, runProcess, - waitForProcess) +import System.Process (readProcess) checkCabalVersion :: IO String checkCabalVersion = do diff --git a/Stackage/InstallInfo.hs b/Stackage/InstallInfo.hs index 6fd1625..069815c 100644 --- a/Stackage/InstallInfo.hs +++ b/Stackage/InstallInfo.hs @@ -4,7 +4,6 @@ module Stackage.InstallInfo , bpPackageList ) where -import Control.Arrow ((&&&)) import Control.Monad (forM_) import qualified Data.Map as Map import qualified Data.Set as Set diff --git a/Stackage/Select.hs b/Stackage/Select.hs index 6d89dcf..39ce902 100644 --- a/Stackage/Select.hs +++ b/Stackage/Select.hs @@ -3,31 +3,15 @@ module Stackage.Select , defaultSelectSettings ) where -import Control.Exception (assert) -import Control.Monad (unless, when) import qualified Data.Map as Map import Data.Maybe (mapMaybe) import Data.Set (empty) import qualified Data.Set as Set -import Distribution.Text (simpleParse) -import Distribution.Version (withinRange) import Prelude hiding (pi) -import Stackage.CheckPlan import Stackage.Config import Stackage.InstallInfo -import Stackage.Tarballs -import Stackage.Test import Stackage.Types import Stackage.Util -import System.Directory (canonicalizePath, - createDirectoryIfMissing, - doesDirectoryExist) -import System.Exit (ExitCode (ExitSuccess), exitWith) -import System.IO (IOMode (WriteMode), hPutStrLn, - withBinaryFile) -import System.Process (rawSystem, readProcess, runProcess, - waitForProcess) -import Stackage.BuildPlan defaultSelectSettings :: SelectSettings defaultSelectSettings = SelectSettings @@ -66,7 +50,6 @@ iiBuildTools InstallInfo { iiPackageDB = PackageDB m, iiPackages = packages } = $ Map.elems $ Map.filterWithKey isSelected m where - unPackageName (PackageName pn) = pn isSelected name _ = name `Set.member` selected selected = Set.fromList $ Map.keys packages diff --git a/Stackage/Util.hs b/Stackage/Util.hs index c3fcb02..c8a7c77 100644 --- a/Stackage/Util.hs +++ b/Stackage/Util.hs @@ -20,8 +20,8 @@ import qualified Distribution.Package as P import qualified Distribution.PackageDescription as PD import Distribution.License (License (..)) import System.Directory (canonicalizePath, - createDirectoryIfMissing, - doesDirectoryExist) + createDirectoryIfMissing + ) -- | Allow only packages with permissive licenses. allowPermissive :: [String] -- ^ list of explicitly allowed packages