Skip to content

Commit

Permalink
Extend DistDirLayout with project root and cabal.project
Browse files Browse the repository at this point in the history
So the DistDirLayout now contains the root dir of the project as a
whole, which eliminates the need to pass it separately in several cases.
It also contains the location of the cabal.project file, which again
avoids having to pass it around.

In part these changes were to allow the elimination of uses of the
legacy config types in the new-build code. The idea is that the legacy
config types are only used by conversion into the new config types, and
then only the new types are used in the new code.
  • Loading branch information
dcoutts committed Dec 29, 2016
1 parent 6568dcb commit 3e1eea4
Show file tree
Hide file tree
Showing 16 changed files with 162 additions and 129 deletions.
1 change: 0 additions & 1 deletion cabal-install/Distribution/Client/CmdBench.hs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ benchAction (configFlags, configExFlags, installFlags, haddockFlags)
targetStrings globalFlags = do

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

targetSelectors <- either reportTargetSelectorProblems return
=<< readTargetSelectors (localPackages baseCtx) targetStrings
Expand Down
1 change: 0 additions & 1 deletion cabal-install/Distribution/Client/CmdBuild.hs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ buildAction (configFlags, configExFlags, installFlags, haddockFlags)
targetStrings globalFlags = do

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

targetSelectors <- either reportTargetSelectorProblems return
=<< readTargetSelectors (localPackages baseCtx) targetStrings
Expand Down
3 changes: 1 addition & 2 deletions cabal-install/Distribution/Client/CmdConfigure.hs
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,10 @@ configureAction (configFlags, configExFlags, installFlags, haddockFlags)
--TODO: deal with _extraArgs, since flags with wrong syntax end up there

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

-- Write out the @cabal.project.local@ so it gets picked up by the
-- planning phase.
writeProjectLocalExtraConfig installFlags (projectRootDir baseCtx)
writeProjectLocalExtraConfig (distDirLayout baseCtx)
cliConfig

buildCtx <-
Expand Down
39 changes: 15 additions & 24 deletions cabal-install/Distribution/Client/CmdFreeze.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,17 @@ module Distribution.Client.CmdFreeze (
freezeAction,
) where

import Distribution.Client.ProjectOrchestration
import Distribution.Client.ProjectPlanning
import Distribution.Client.ProjectConfig
( ProjectConfig(..), ProjectConfigShared(..)
, commandLineFlagsToProjectConfig, writeProjectLocalFreezeConfig
, findProjectRoot, getProjectFileName )
, writeProjectLocalFreezeConfig )
import Distribution.Client.Targets
( UserConstraint(..) )
import Distribution.Solver.Types.ConstraintSource
( ConstraintSource(..) )
import Distribution.Client.DistDirLayout
( defaultDistDirLayout, defaultCabalDirLayout )
import Distribution.Client.Config
( defaultCabalDir )
( DistDirLayout(distProjectFile) )
import qualified Distribution.Client.InstallPlan as InstallPlan


Expand All @@ -43,7 +41,6 @@ import Data.Monoid as Monoid
import qualified Data.Map as Map
import Data.Map (Map)
import Control.Monad (unless)
import System.FilePath

import Distribution.Simple.Command
( CommandUI(..), usageAlternatives )
Expand Down Expand Up @@ -111,35 +108,29 @@ freezeAction (configFlags, configExFlags, installFlags, haddockFlags)
die $ "'freeze' doesn't take any extra arguments: "
++ unwords extraArgs

cabalDir <- defaultCabalDir
let cabalDirLayout = defaultCabalDirLayout cabalDir

projectRootDir <- findProjectRoot installFlags
let distDirLayout = defaultDistDirLayout configFlags projectRootDir

let cliConfig = commandLineFlagsToProjectConfig
globalFlags configFlags configExFlags
installFlags haddockFlags

(projectConfig, localPackages) <-
rebuildProjectConfig verbosity
installFlags --TODO: eliminate
projectRootDir distDirLayout
cliConfig
ProjectBaseContext {
distDirLayout,
cabalDirLayout,
projectConfig,
localPackages
} <- establishProjectBaseContext verbosity cliConfig

(_, elaboratedPlan, _) <-
rebuildInstallPlan verbosity
projectRootDir distDirLayout cabalDirLayout
distDirLayout cabalDirLayout
projectConfig
localPackages

let freezeConfig = projectFreezeConfig elaboratedPlan
writeProjectLocalFreezeConfig installFlags projectRootDir freezeConfig
writeProjectLocalFreezeConfig distDirLayout freezeConfig
notice verbosity $
"Wrote freeze file: " ++ projectRootDir </> getProjectFileName installFlags <.> "freeze"
"Wrote freeze file: " ++ distProjectFile distDirLayout "freeze"

where
verbosity = fromFlagOrDefault normal (configVerbosity configFlags)
cliConfig = commandLineFlagsToProjectConfig
globalFlags configFlags configExFlags
installFlags haddockFlags



Expand Down
1 change: 0 additions & 1 deletion cabal-install/Distribution/Client/CmdHaddock.hs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ haddockAction (configFlags, configExFlags, installFlags, haddockFlags)
targetStrings globalFlags = do

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

targetSelectors <- either reportTargetSelectorProblems return
=<< readTargetSelectors (localPackages baseCtx) targetStrings
Expand Down
1 change: 0 additions & 1 deletion cabal-install/Distribution/Client/CmdRepl.hs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ replAction (configFlags, configExFlags, installFlags, haddockFlags)
targetStrings globalFlags = do

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

targetSelectors <- either reportTargetSelectorProblems return
=<< readTargetSelectors (localPackages baseCtx) targetStrings
Expand Down
1 change: 0 additions & 1 deletion cabal-install/Distribution/Client/CmdRun.hs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ runAction (configFlags, configExFlags, installFlags, haddockFlags)
targetStrings globalFlags = do

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

targetSelectors <- either reportTargetSelectorProblems return
=<< readTargetSelectors (localPackages baseCtx) targetStrings
Expand Down
1 change: 0 additions & 1 deletion cabal-install/Distribution/Client/CmdTest.hs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ testAction (configFlags, configExFlags, installFlags, haddockFlags)
targetStrings globalFlags = do

baseCtx <- establishProjectBaseContext verbosity cliConfig
configFlags installFlags --TODO: eliminate use of legacy config types

targetSelectors <- either reportTargetSelectorProblems return
=<< readTargetSelectors (localPackages baseCtx) targetStrings
Expand Down
40 changes: 31 additions & 9 deletions cabal-install/Distribution/Client/DistDirLayout.hs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ module Distribution.Client.DistDirLayout (
defaultCabalDirLayout,
) where

import Data.Maybe (fromMaybe)
import System.FilePath
import Distribution.Simple.Setup (fromFlagOrDefault, ConfigFlags, configDistPref)

import Distribution.Package
( PackageId, ComponentId, UnitId )
import Distribution.Compiler
Expand Down Expand Up @@ -52,8 +53,19 @@ data DistDirParams = DistDirParams {
--
data DistDirLayout = DistDirLayout {

-- | The dist directory, which is the root of where cabal keeps all its
-- state including the build artifacts from each package we build.
-- | The root directory of the project. Many other files are relative to
-- this location. In particular, the @cabal.project@ lives here.
--
distProjectRootDirectory :: FilePath,

-- | The @cabal.project@ file and related like @cabal.project.freeze@.
-- The parameter is for the extension, like \"freeze\", or \"\" for the
-- main file.
--
distProjectFile :: String -> FilePath,

-- | The \"dist\" directory, which is the root of where cabal keeps all
-- its state including the build artifacts from each package we build.
--
distDirectory :: FilePath,

Expand Down Expand Up @@ -107,14 +119,24 @@ data CabalDirLayout = CabalDirLayout {
cabalWorldFile :: FilePath
}

-- | Given the path to the root directory, create the 'DistDirLayout'
-- associated with it. Respects @--builddir@ setting.
defaultDistDirLayout :: ConfigFlags -> FilePath -> DistDirLayout
defaultDistDirLayout configFlags projectRootDirectory =
-- | Make the default 'DistDirLayout' based on the project root dir and
-- optional overrides for the location of the @dist@ directory and the
-- @cabal.project@ file.
--
defaultDistDirLayout :: FilePath -- ^ the project root directory (absolute)
-> Maybe FilePath -- ^ the @dist@ directory or default
-- (absolute or relative to the root)
-> Maybe FilePath -- ^ the @cabal.project@ file or default
-- (absolute or relative to the root)
-> DistDirLayout
defaultDistDirLayout projectRootDir mdistDirectory mprojectFile =
DistDirLayout {..}
where
distDirName = fromFlagOrDefault "dist-newstyle" (configDistPref configFlags)
distDirectory = projectRootDirectory </> distDirName
distProjectRootDirectory = projectRootDir
distProjectFile ext = projectRootDir
</> fromMaybe "cabal.project" mprojectFile <.> ext

distDirectory = projectRootDir </> fromMaybe "dist-newstyle" mdistDirectory
--TODO: switch to just dist at some point, or some other new name

distBuildRootDirectory = distDirectory </> "build"
Expand Down
Loading

0 comments on commit 3e1eea4

Please sign in to comment.