{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-} -- | Constants used throughout the project. module Stack.Constants (builtConfigFileFromDir ,builtFileFromDir ,configuredFileFromDir ,defaultShakeThreads ,distDirFromDir ,distRelativeDir ,haskellFileExts ,projectDockerSandboxDir ,rawGithubUrl ,stackDotYaml ,stackRootEnvVar ,userDocsDir ,configCacheFile ,buildCacheFile ,stackProgName ) where import Control.Monad (liftM) import Control.Monad.Catch (MonadThrow) import Control.Monad.Reader (MonadReader) import Data.Text (Text) import qualified Data.Text as T import Path as FL import Prelude import Stack.Types.Config import Stack.Types.PackageIdentifier import Stack.Types.Version -- | Extensions used for Haskell files. haskellFileExts :: [Text] haskellFileExts = ["hs","hsc","lhs"] -- | The filename used for completed build indicators. builtFileFromDir :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> Path Abs Dir -> m (Path Abs File) builtFileFromDir cabalPkgVer fp = do dist <- distDirFromDir cabalPkgVer fp return (dist $(mkRelFile "stack.gen")) -- | The filename used for completed configure indicators. configuredFileFromDir :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> Path Abs Dir -> m (Path Abs File) configuredFileFromDir cabalPkgVer fp = do dist <- distDirFromDir cabalPkgVer fp return (dist $(mkRelFile "setup-config")) -- | The filename used for completed build indicators. builtConfigFileFromDir :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> Path Abs Dir -> m (Path Abs File) builtConfigFileFromDir cabalPkgVer fp = liftM (fp ) (builtConfigRelativeFile cabalPkgVer) -- | Relative location of completed build indicators. builtConfigRelativeFile :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> m (Path Rel File) builtConfigRelativeFile cabalPkgVer = do dist <- distRelativeDir cabalPkgVer return (dist $(mkRelFile "stack.config")) -- | Default shake thread count for parallel builds. defaultShakeThreads :: Int defaultShakeThreads = 4 -- -- | Hoogle database file. -- hoogleDatabaseFile :: Path Abs Dir -> Path Abs File -- hoogleDatabaseFile docLoc = -- docLoc -- $(mkRelFile "default.hoo") -- -- | Extension for hoogle databases. -- hoogleDbExtension :: String -- hoogleDbExtension = "hoo" -- -- | Extension of haddock files -- haddockExtension :: String -- haddockExtension = "haddock" -- | User documentation directory. userDocsDir :: Config -> Path Abs Dir userDocsDir config = configStackRoot config $(mkRelDir "doc/") -- | The filename used for dirtiness check of source files. buildCacheFile :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> Path Abs Dir -- ^ Package directory. -> m (Path Abs File) buildCacheFile cabalPkgVersion dir = do liftM ( $(mkRelFile "stack-build-cache")) (distDirFromDir cabalPkgVersion dir) -- | The filename used for dirtiness check of config. configCacheFile :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> Path Abs Dir -- ^ Package directory. -> m (Path Abs File) configCacheFile cabalPkgVersion dir = do liftM ( $(mkRelFile "stack-config-cache")) (distDirFromDir cabalPkgVersion dir) -- | Package's build artifacts directory. distDirFromDir :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> Path Abs Dir -> m (Path Abs Dir) distDirFromDir cabalPkgVersion fp = liftM (fp ) (distRelativeDir cabalPkgVersion) -- | Relative location of build artifacts. distRelativeDir :: (MonadThrow m, MonadReader env m, HasPlatform env) => PackageIdentifier -- ^ Cabal version -> m (Path Rel Dir) distRelativeDir cabalPkgVer = do platform <- platformRelDir cabal <- parseRelDir $ "Cabal-" ++ versionString (packageIdentifierVersion cabalPkgVer) return $ $(mkRelDir "dist-stack/") platform cabal -- pkgIndexDir :: Config -> Path Abs Dir -- pkgIndexDir config = -- configStackRoot config -- $(mkRelDir "package-index") -- pkgIndexFile :: Config -> Path Abs File -- pkgIndexFile config = -- pkgIndexDir config -- $(mkRelFile "00-index.tar") -- | Get a URL for a raw file on Github rawGithubUrl :: Text -- ^ user/org name -> Text -- ^ repo name -> Text -- ^ branch name -> Text -- ^ filename -> Text rawGithubUrl org repo branch file = T.concat [ "https://raw.githubusercontent.com/" , org , "/" , repo , "/" , branch , "/" , file ] -- -- | Hoogle database file. -- hoogleDatabaseFile :: Path Abs Dir -> Path Abs File -- hoogleDatabaseFile docLoc = -- docLoc -- $(mkRelFile "default.hoo") -- -- | Extension for hoogle databases. -- hoogleDbExtension :: String -- hoogleDbExtension = "hoo" -- -- | Extension of haddock files -- haddockExtension :: String -- haddockExtension = "haddock" -- | Docker sandbox from project root. projectDockerSandboxDir :: Path Abs Dir -> Path Abs Dir projectDockerSandboxDir projectRoot = projectRoot $(mkRelDir ".docker-sandbox/") -- | Name of the 'stack' program. stackProgName :: String stackProgName = "stack" -- | The filename used for the stack config file. stackDotYaml :: Path Rel File stackDotYaml = $(mkRelFile "stack.yaml") -- | Environment variable used to override the '~/.stack' location. stackRootEnvVar :: String stackRootEnvVar = "STACK_ROOT"