packages feed

hhp-1.0.3: lib/Hhp/Debug.hs

module Hhp.Debug (debugInfo, rootInfo) where

import GHC.Utils.Monad (liftIO)

import Control.Applicative ((<|>))
import Data.List (intercalate)
import Data.Maybe (fromJust, fromMaybe, isJust)

import Hhp.CabalApi
import Hhp.GHCApi
import Hhp.Types

----------------------------------------------------------------

-- | Obtaining debug information.
debugInfo
    :: Options
    -> Cradle
    -> IO String
debugInfo opt cradle =
    convert opt <$> do
        CompilerOptions gopts incDir pkgs <-
            if cabal
                then liftIO (fromCabalFile <|> return simpleCompilerOption)
                else return simpleCompilerOption
        mglibdir <- liftIO getSystemLibDir
        return
            [ "Root directory:      " ++ rootDir
            , "Current directory:   " ++ currentDir
            , "Cabal file:          " ++ cabalFile
            , "GHC options:         " ++ unwords gopts
            , "Include directories: " ++ unwords incDir
            , "Dependent packages:  " ++ intercalate ", " (map showPkg pkgs)
            , "System libraries:    " ++ fromMaybe "" mglibdir
            ]
  where
    currentDir = cradleCurrentDir cradle
    mCabalFile = cradleCabalFile cradle
    rootDir = cradleRootDir cradle
    cabal = isJust mCabalFile
    cabalFile = fromMaybe "" mCabalFile
    origGopts = ghcOpts opt
    simpleCompilerOption = CompilerOptions origGopts [] []
    fromCabalFile = do
        pkgDesc <- parseCabalFile file
        getCompilerOptions origGopts cradle pkgDesc
      where
        file = fromJust mCabalFile

----------------------------------------------------------------

-- | Obtaining root information.
rootInfo
    :: Options
    -> Cradle
    -> IO String
rootInfo opt cradle = return $ convert opt $ cradleRootDir cradle