packages feed

stack-0.0.1: src/Stack/Constants.hs

{-# 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"