Refactor imports.
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 22 Aug 2015 17:00:14 +0000 (18:00 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Sat, 22 Aug 2015 17:00:14 +0000 (18:00 +0100)
32 files changed:
src/Base.hs
src/Builder.hs
src/Expression.hs
src/Main.hs
src/Oracles/Base.hs
src/Oracles/Dependencies.hs
src/Oracles/Flag.hs
src/Oracles/PackageData.hs
src/Oracles/PackageDeps.hs
src/Oracles/Setting.hs
src/Oracles/WindowsRoot.hs
src/Package.hs
src/Predicates.hs
src/Rules.hs
src/Rules/Cabal.hs
src/Rules/Config.hs
src/Rules/Data.hs
src/Rules/Dependencies.hs
src/Rules/Documentation.hs
src/Rules/Library.hs
src/Rules/Oracles.hs
src/Rules/Package.hs
src/Rules/Resources.hs
src/Settings/Builders/Gcc.hs
src/Settings/Builders/Ghc.hs
src/Settings/Builders/Haddock.hs
src/Settings/Packages.hs
src/Settings/Util.hs
src/Stage.hs
src/Target.hs
src/Util.hs
src/Way.hs

index 4ffe8a8..c2d864d 100644 (file)
@@ -1,18 +1,17 @@
 module Base (
-    shakeFilesPath, configPath,
-    bootPackageConstraints, packageDependencies,
     module Development.Shake,
-    module Development.Shake.Util,
-    module Development.Shake.Config,
     module Development.Shake.Classes,
-    module Development.Shake.FilePath
+    module Development.Shake.Config,
+    module Development.Shake.FilePath,
+    module Development.Shake.Util,
+    shakeFilesPath, configPath, bootPackageConstraints, packageDependencies
     ) where
 
-import Development.Shake
-import Development.Shake.Util
-import Development.Shake.Config
+import Development.Shake hiding (unit)
 import Development.Shake.Classes
+import Development.Shake.Config
 import Development.Shake.FilePath
+import Development.Shake.Util
 
 shakeFilesPath :: FilePath
 shakeFilesPath = "_build/"
index bd0ef49..2a6ff6c 100644 (file)
@@ -1,17 +1,12 @@
 {-# LANGUAGE DeriveGeneric #-}
-
-module Builder (
-    Builder (..), builderKey, builderPath, specified, needBuilder
-    ) where
+module Builder (Builder (..), builderPath, specified, needBuilder) where
 
 import Base
-import Util
-import Stage
-import Data.List
+import GHC.Generics
 import Oracles.Base
 import Oracles.Setting
 import Oracles.WindowsRoot
-import GHC.Generics
+import Stage
 
 -- A Builder is an external command invoked in separate process using Shake.cmd
 --
index b5a1fad..26c6a9b 100644 (file)
@@ -1,9 +1,13 @@
 {-# LANGUAGE FlexibleInstances #-}
 module Expression (
-    module Data.Monoid,
     module Control.Monad.Reader,
+    module Builder,
+    module Package,
+    module Stage,
+    module Util,
+    module Way,
     Expr, DiffExpr, fromDiffExpr,
-    Predicate, PredicateLike (..), applyPredicate, (??),
+    Predicate, (?), (??), notP, applyPredicate,
     Args, Ways, Packages,
     apply, append, appendM, remove,
     appendSub, appendSubD, filterSub, removeSub,
@@ -12,16 +16,14 @@ module Expression (
     getSources, getSource, getWay
     ) where
 
-import Way
 import Base
-import Util
-import Stage
 import Builder
+import Control.Monad.Reader
 import Package
+import Stage
 import Target (Target (..), PartialTarget (..), fromPartial)
-import Data.List
-import Data.Monoid
-import Control.Monad.Reader hiding (liftIO)
+import Util
+import Way
 
 -- Expr a is a computation that produces a value of type Action a and can read
 -- parameters of the current build Target.
@@ -119,7 +121,7 @@ appendSubD :: String -> Args -> Args
 appendSubD prefix diffExpr = fromDiffExpr diffExpr >>= appendSub prefix
 
 filterSub :: String -> (String -> Bool) -> Args
-filterSub prefix p = apply . map $ filterSubstr
+filterSub prefix p = apply $ map filterSubstr
   where
     filterSubstr s
         | prefix `isPrefixOf` s = unwords . filter p . words $ s
index b578f70..1e6c52c 100644 (file)
@@ -1,11 +1,13 @@
 import Base
 import Rules
+import Rules.Cabal
+import Rules.Config
+import Rules.Oracles
 
 main :: IO ()
 main = shakeArgs shakeOptions{shakeFiles = shakeFilesPath} $ do
-    oracleRules     -- see module Rules.Oracles
-    cabalRules      -- see module Rules.Cabal
+    generateTargets -- see module Rules
     packageRules    -- see module Rules
+    cabalRules      -- see module Rules.Cabal
     configRules     -- see module Rules.Config
-    generateTargets -- see module Rules
-
+    oracleRules     -- see module Rules.Oracles
index 83fe741..8b68c74 100644 (file)
@@ -1,19 +1,24 @@
 {-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
 
 module Oracles.Base (
-    askConfigWithDefault, askConfig, configOracle,
-    putOracle
+    module Base,
+    module Control.Applicative,
+    module Util,
+    askConfig, askConfigWithDefault, configOracle
     ) where
 
 import Base
 import Util
-import Control.Applicative
-import Control.Monad.Extra
+import Control.Applicative hiding ((*>))
 import qualified Data.HashMap.Strict as Map
 
 newtype ConfigKey = ConfigKey String
     deriving (Show, Typeable, Eq, Hashable, Binary, NFData)
 
+askConfig :: String -> Action String
+askConfig key = askConfigWithDefault key . putError
+    $ "Cannot find key '" ++ key ++ "' in configuration files."
+
 askConfigWithDefault :: String -> Action String -> Action String
 askConfigWithDefault key defaultAction = do
     maybeValue <- askOracle $ ConfigKey key
@@ -21,10 +26,6 @@ askConfigWithDefault key defaultAction = do
         Just value -> return value
         Nothing    -> defaultAction
 
-askConfig :: String -> Action String
-askConfig key = askConfigWithDefault key . putError
-    $ "Cannot find key '" ++ key ++ "' in configuration files."
-
 -- Oracle for configuration files
 configOracle :: Rules ()
 configOracle = do
index f9cfb25..41c28b3 100644 (file)
@@ -7,8 +7,6 @@ module Oracles.Dependencies (
 
 import Base
 import Util
-import Data.List
-import Data.Function
 import qualified Data.HashMap.Strict as Map
 import Control.Applicative
 
index cc761de..dcde2cf 100644 (file)
@@ -4,11 +4,8 @@ module Oracles.Flag (
     platformSupportsSharedLibs, ghcWithSMP, ghcWithNativeCodeGen
     ) where
 
-import Base
-import Util
 import Oracles.Base
 import Oracles.Setting
-import Control.Monad
 
 data Flag = GccIsClang
           | GccLt46
index c873601..1250fe2 100644 (file)
@@ -7,7 +7,6 @@ module Oracles.PackageData (
 
 import Base
 import Util
-import Data.List
 import Control.Applicative
 import qualified Data.HashMap.Strict as Map
 
index 3c2d4ea..cc2f08b 100644 (file)
@@ -5,12 +5,9 @@ module Oracles.PackageDeps (
     packageDepsOracle
     ) where
 
-import Base
 import Package
 import Oracles.Base
-import Data.Maybe
 import qualified Data.HashMap.Strict as Map
-import Control.Applicative
 
 newtype PackageDepsKey = PackageDepsKey PackageName
     deriving (Show, Typeable, Eq, Hashable, Binary, NFData)
index 20e4376..b88aa56 100644 (file)
@@ -6,7 +6,6 @@ module Oracles.Setting (
     ghcEnableTablesNextToCode, cmdLineLengthLimit
     ) where
 
-import Base
 import Stage
 import Oracles.Base
 
index 4eb23ad..6312629 100644 (file)
@@ -6,7 +6,6 @@ module Oracles.WindowsRoot (
 
 import Base
 import Util
-import Data.List
 
 newtype WindowsRoot = WindowsRoot ()
     deriving (Show, Typeable, Eq, Hashable, Binary, NFData)
index fab8f28..b96435f 100644 (file)
@@ -1,14 +1,12 @@
 {-# LANGUAGE DeriveGeneric #-}
-
 module Package (
-    Package (..), PackageName, pkgCabalFile,
-    library, topLevel, setPath
+    Package (..), PackageName, pkgCabalFile, setPath,
+    library, topLevel
     ) where
 
 import Base
+import GHC.Generics (Generic)
 import Util
-import Data.Function
-import GHC.Generics
 
 -- It is helpful to distinguish package names from strings.
 type PackageName = String
index 0dfa8db..57637e6 100644 (file)
@@ -4,15 +4,11 @@ module Predicates (
     registerPackage, splitObjects
     ) where
 
-import Way
 import Base
-import Stage
-import Package
-import Builder
 import Expression
-import Settings.Default
 import Oracles.Flag
 import Oracles.Setting
+import Settings.Default
 
 -- Basic predicates (see Switches.hs for derived predicates)
 stage :: Stage -> Predicate
index 0dcaaf1..6586ed7 100644 (file)
@@ -1,26 +1,17 @@
-module Rules (
-    oracleRules, cabalRules, configRules, packageRules, generateTargets
-    ) where
+module Rules (generateTargets, packageRules) where
 
-import Way
 import Base
-import Util
-import Stage
-import Target (PartialTarget (..))
 import Expression
 import Oracles.PackageData
-import Rules.Cabal
-import Rules.Config
 import Rules.Package
-import Rules.Oracles
 import Rules.Resources
-import Settings.Ways
+import Settings.Packages
 import Settings.User
 import Settings.Util
-import Settings.Packages
-import Settings.TargetDirectory
+import Settings.Ways
+import Target (PartialTarget (..))
 
--- generateTargets needs package-data.mk files of all target packages
+-- generateTargets needs top-level build targets
 generateTargets :: Rules ()
 generateTargets = action $ do
     targets <- fmap concat . forM [Stage0 ..] $ \stage -> do
index 4cb7391..d5f952d 100644 (file)
@@ -5,7 +5,6 @@ import Stage
 import Package hiding (library)
 import Expression
 import Settings.Packages
-import Data.List
 import Data.Version
 import Distribution.Package
 import Distribution.Verbosity
index bc4663a..956b3dd 100644 (file)
@@ -2,8 +2,6 @@ module Rules.Config (configRules) where
 
 import Base
 import Util
-import Data.List
-import Control.Monad
 
 -- We add the following line to 'configure.ac' in order to produce configuration
 -- file "system.config" from "system.config.in" by running 'configure' script.
index d481a67..32637dc 100644 (file)
@@ -12,9 +12,6 @@ import Settings.Packages
 import Settings.TargetDirectory
 import Rules.Actions
 import Rules.Resources
-import Data.List
-import Control.Applicative
-import Control.Monad.Extra
 
 -- Build package-data.mk by using GhcCabal to process pkgCabal file
 buildPackageData :: Resources -> PartialTarget -> Rules ()
@@ -23,7 +20,7 @@ buildPackageData rs target @ (PartialTarget stage pkg) = do
         cabalFile = pkgCabalFile pkg
         configure = pkgPath pkg -/- "configure"
 
-    (path -/-) <$>
+    fmap (path -/-)
         [ "package-data.mk"
         , "haddock-prologue.txt"
         , "inplace-pkg-config"
@@ -65,7 +62,7 @@ buildPackageData rs target @ (PartialTarget stage pkg) = do
 -- Reason: Shake's built-in makefile parser doesn't recognise slashes
 postProcessPackageData :: FilePath -> Action ()
 postProcessPackageData file = do
-    pkgData <- (filter ('$' `notElem`) . lines) <$> liftIO (readFile file)
+    pkgData <- fmap (filter ('$' `notElem`) . lines) . liftIO $ readFile file
     length pkgData `seq` writeFileLines file $ map processLine pkgData
       where
         processLine line = replaceSeparators '_' prefix ++ suffix
index 586f6d4..4b209ec 100644 (file)
@@ -8,7 +8,6 @@ import Expression
 import Target (PartialTarget (..), fullTarget)
 import Oracles.PackageData
 import Settings.Util
-import Settings.TargetDirectory
 import Rules.Actions
 import Rules.Resources
 
@@ -28,7 +27,7 @@ buildPackageDependencies _ target @ (PartialTarget stage pkg) =
             srcs <- interpretPartial target getPackageSources
             need srcs
             build $ fullTarget target (GhcM stage) srcs [file]
-            removeFile $ file <.> "bak"
+            removeFileIfExists $ file <.> "bak"
 
         (buildPath -/- ".dependencies") %> \file -> do
             cSrcs <- pkgDataList $ CSrcs path
index b4c8529..b931515 100644 (file)
@@ -14,7 +14,6 @@ import Rules.Resources
 import Settings.Util
 import Settings.User
 import Settings.Packages
-import Control.Monad.Extra
 
 -- Note: this build rule creates plenty of files, not just the .haddock one.
 -- All of them go into the 'doc' subdirectory. Pedantically tracking all built
index 4ff15c3..4a6334f 100644 (file)
@@ -1,20 +1,14 @@
 module Rules.Library (buildPackageLibrary) where
 
-import Way
-import Base hiding (splitPath)
-import Util
-import Target (PartialTarget (..), fullTarget)
-import Builder
-import Package
+import Base hiding (splitPath, getDirectoryContents)
 import Expression
-import Predicates (splitObjects)
 import Oracles.PackageData
-import Settings.Util
-import Settings.TargetDirectory
+import Predicates (splitObjects)
 import Rules.Actions
 import Rules.Resources
-import Data.List
-import qualified System.Directory as IO
+import Settings.Util
+import System.Directory (getDirectoryContents)
+import Target (PartialTarget (..), fullTarget)
 
 buildPackageLibrary :: Resources -> PartialTarget -> Rules ()
 buildPackageLibrary _ target @ (PartialTarget stage pkg) = do
@@ -23,7 +17,7 @@ buildPackageLibrary _ target @ (PartialTarget stage pkg) = do
 
     -- TODO: handle dynamic libraries
     matchBuildResult buildPath "a" ?> \a -> do
-        removeFile a
+        removeFileIfExists a
         cSrcs <- cSources target
         hSrcs <- hSources target
 
@@ -39,7 +33,7 @@ buildPackageLibrary _ target @ (PartialTarget stage pkg) = do
         splitObjs <- if not split then return [] else
             fmap concat $ forM hSrcs $ \src -> do
                 let splitPath = buildPath -/- src ++ "_" ++ osuf way ++ "_split"
-                contents <- liftIO $ IO.getDirectoryContents splitPath
+                contents <- liftIO $ getDirectoryContents splitPath
                 return . map (splitPath -/-)
                        . filter (not . all (== '.')) $ contents
 
index 9b6d597..c572d15 100644 (file)
@@ -1,16 +1,13 @@
-module Rules.Oracles (
-    oracleRules
-    ) where
+module Rules.Oracles (oracleRules) where
 
 import Base
-import Oracles.Base
 import Oracles.ArgsHash
+import Oracles.Base
+import Oracles.Dependencies
 import Oracles.PackageData
-import Oracles.WindowsRoot
 import Oracles.PackageDeps
-import Oracles.Dependencies
+import Oracles.WindowsRoot
 import Settings.User
-import Control.Monad
 
 oracleRules :: Rules ()
 oracleRules = do
index f2b724a..3095679 100644 (file)
@@ -1,14 +1,14 @@
 module Rules.Package (buildPackage) where
 
 import Base
-import Target
 import Expression
-import Rules.Data
 import Rules.Compile
-import Rules.Library
-import Rules.Resources
+import Rules.Data
 import Rules.Dependencies
 import Rules.Documentation
+import Rules.Library
+import Rules.Resources
+import Target
 
 buildPackage :: Resources -> PartialTarget -> Rules ()
 buildPackage = mconcat
index 8a91400..ec00207 100644 (file)
@@ -1,9 +1,7 @@
-module Rules.Resources (
-    resourceRules, Resources(..)
-    ) where
+module Rules.Resources (resourceRules, Resources (..)) where
 
 import Base
-import Control.Monad
+import Util
 
 data Resources = Resources
     {
index 20867f7..a3d088e 100644 (file)
@@ -2,7 +2,6 @@ module Settings.Builders.Gcc (gccArgs, gccMArgs) where
 
 import Base
 import Util
-import Builder
 import Expression
 import Predicates (stagedBuilder)
 import Oracles.PackageData
@@ -41,10 +40,10 @@ gccMArgs = stagedBuilder GccM ? do
 
 includeGccArgs :: Args
 includeGccArgs = do
-    path    <- getTargetPath
-    pkgPath <- getPackagePath
-    iDirs   <- getPkgDataList IncludeDirs
-    dDirs   <- getPkgDataList DepIncludeDirs
+    pkg   <- getPackage
+    path  <- getTargetPath
+    iDirs <- getPkgDataList IncludeDirs
+    dDirs <- getPkgDataList DepIncludeDirs
     mconcat
         [ arg $ "-I" ++ path -/- "build/autogen"
-        , append . map (\dir -> "-I" ++ pkgPath -/- dir) $ iDirs ++ dDirs ]
+        , append . map (\dir -> "-I" ++ pkgPath pkg -/- dir) $ iDirs ++ dDirs ]
index e48be86..43cf034 100644 (file)
@@ -1,9 +1,6 @@
 module Settings.Builders.Ghc (ghcArgs, ghcMArgs, commonGhcArgs) where
 
-import Way
 import Util
-import Stage
-import Builder
 import Expression
 import Predicates (stagedBuilder, splitObjects, stage0)
 import Oracles.Flag
@@ -91,8 +88,8 @@ packageGhcArgs = do
 
 includeGhcArgs :: Args
 includeGhcArgs = do
+    pkg     <- getPackage
     path    <- getTargetPath
-    pkgPath <- getPackagePath
     srcDirs <- getPkgDataList SrcDirs
     incDirs <- getPkgDataList IncludeDirs
     cppArgs <- getPkgDataList CppArgs
@@ -104,8 +101,8 @@ includeGhcArgs = do
         , arg $ "-i" ++ autogenPath
         , arg $ "-I" ++ buildPath
         , arg $ "-I" ++ autogenPath
-        , append [ "-i" ++ pkgPath -/- dir | dir <- srcDirs ]
-        , append [ "-I" ++ pkgPath -/- dir | dir <- incDirs ]
+        , append [ "-i" ++ pkgPath pkg -/- dir | dir <- srcDirs ]
+        , append [ "-I" ++ pkgPath pkg -/- dir | dir <- incDirs ]
         , arg "-optP-include", arg $ "-optP" ++ autogenPath -/- "cabal_macros.h"
         , append $ map ("-optP" ++) cppArgs ]
 
index 0e839ce..aa9282c 100644 (file)
@@ -10,7 +10,6 @@ import Oracles.PackageData
 import Settings.Util
 import Settings.Packages
 import Settings.Builders.Ghc
-import Settings.TargetDirectory
 
 haddockArgs :: Args
 haddockArgs = builder Haddock ? do
index b84bb5b..497f9fc 100644 (file)
@@ -9,7 +9,6 @@ import Predicates
 import Oracles.Setting
 import Settings.User
 import Settings.Default
-import Data.List
 
 -- Combining default list of packages with user modifications
 packages :: Packages
index 1ab4308..93ad873 100644 (file)
@@ -1,4 +1,5 @@
 module Settings.Util (
+    module Settings.TargetDirectory,
     arg, argM,
     argSetting, argSettingList, argStagedSettingList, argStagedBuilderPath,
     getFlag, getSetting, getSettingList, getStagedSettingList,
@@ -9,7 +10,6 @@ module Settings.Util (
     ) where
 
 import Base
-import Util
 import Stage
 import Builder
 import Package
@@ -19,8 +19,6 @@ import Oracles.Flag
 import Oracles.Setting
 import Oracles.PackageData
 import Settings.TargetDirectory
-import Data.List
-import Data.Function
 
 -- A single argument.
 arg :: String -> Args
index 303818a..50a273b 100644 (file)
@@ -1,12 +1,10 @@
-{-# LANGUAGE DeriveGeneric, FlexibleInstances #-}
-
-module Stage (
-    Stage (..)
-    ) where
+{-# LANGUAGE DeriveGeneric #-}
+module Stage (Stage (..)) where
 
 import Base
-import GHC.Generics
+import GHC.Generics (Generic)
 
+-- TODO: rename to something more meaningful, e.g. Stage0 -> Boot.
 data Stage = Stage0 | Stage1 | Stage2 | Stage3 deriving (Eq, Enum, Generic)
 
 instance Show Stage where
index 5604198..2b90426 100644 (file)
@@ -1,17 +1,17 @@
 {-# LANGUAGE DeriveGeneric, FlexibleInstances #-}
 module Target (
     Target (..), PartialTarget (..),
-    fromPartial, fullTarget, fullTargetWithWay,
+    fromPartial, fullTarget, fullTargetWithWay
     ) where
 
-import Way
 import Base
-import Stage
-import Package
 import Builder
-import GHC.Generics
-import Data.Monoid
 import Control.Monad.Reader
+import GHC.Generics (Generic)
+import Package
+import Stage
+import Way
+import Util
 
 -- Target captures all parameters relevant to the current build target:
 -- * Stage and Package being built,
index 51b5ccb..5949d69 100644 (file)
@@ -1,20 +1,28 @@
 module Util (
+    module Control.Monad.Extra,
     module Data.Char,
+    module Data.Function,
+    module Data.List,
+    module Data.Maybe,
+    module Data.Monoid,
     module System.Console.ANSI,
-    replaceIf, replaceEq, replaceSeparators, decodeModule,
-    unifyPath, (-/-),
-    chunksOfSize,
+    replaceEq, replaceSeparators, decodeModule,
+    unifyPath, (-/-), chunksOfSize,
     putColoured, putOracle, putBuild, putSuccess, putError,
     bimap, minusOrd, intersectOrd,
-    removeFile
+    removeFileIfExists
     ) where
 
-import Base
+import Base hiding (doesFileExist)
+import Control.Monad.Extra
 import Data.Char
-import Control.Monad
-import System.IO
+import Data.Function
+import Data.List
+import Data.Maybe
+import Data.Monoid
 import System.Console.ANSI
-import qualified System.Directory as IO
+import System.Directory (doesFileExist, removeFile)
+import System.IO
 
 replaceIf :: (a -> Bool) -> a -> [a] -> [a]
 replaceIf p to = map (\from -> if p from then to else from)
@@ -69,11 +77,11 @@ putOracle = putColoured Blue
 putBuild :: String -> Action ()
 putBuild = putColoured White
 
--- A more colourful version of error
+-- A more colourful version of success message
 putSuccess :: String -> Action ()
 putSuccess = putColoured Green
 
--- A more colourful version of error
+-- A more colourful version of error message
 putError :: String -> Action a
 putError msg = do
     putColoured Red msg
@@ -102,9 +110,6 @@ intersectOrd cmp = loop
          EQ -> x : loop xs ys
          GT ->     loop (x:xs) ys
 
--- Convenient helper function for removing a single file that doesn't
--- necessarily exist.
-removeFile :: FilePath -> Action ()
-removeFile file = do
-    exists <- liftIO $ IO.doesFileExist file
-    when exists . liftIO $ IO.removeFile file
+-- Convenient helper function for removing a file that doesn't necessarily exist
+removeFileIfExists :: FilePath -> Action ()
+removeFileIfExists file = liftIO . whenM (doesFileExist file) $ removeFile file
index a1df1ce..ede6bfe 100644 (file)
@@ -1,6 +1,5 @@
 module Way (
-    WayUnit (..),
-    Way, wayFromUnits, wayUnit,
+    WayUnit (..), Way, wayUnit,
 
     vanilla, profiling, logging, parallel, granSim,
     threaded, threadedProfiling, threadedLogging,
@@ -13,14 +12,11 @@ module Way (
     safeDetectWay, detectWay, matchBuildResult
     ) where
 
-import Base hiding (unit)
-import Util
-import Oracles.Setting
-import Data.List
+import Base
 import Data.IntSet (IntSet)
-import Control.Applicative
 import qualified Data.IntSet as Set
-import Data.Maybe
+import Oracles.Setting
+import Util hiding (unit)
 
 data WayUnit = Threaded
              | Debug
@@ -168,7 +164,7 @@ matchBuildResult path suffix file =
 -- Instances for storing in the Shake database
 instance Binary Way where
     put = put . show
-    get = read <$> get
+    get = fmap read get
 
 instance Hashable Way where
     hashWithSalt salt = hashWithSalt salt . show