-- | Paths to GHC binaries and directories. module Haste.GHCPaths where import Control.Shell import System.IO.Unsafe import System.Directory (findExecutable) import Config (cProjectVersion) import Data.Maybe (catMaybes) -- | Path to the GHC binary. ghcBinary :: FilePath ghcBinary = unsafePerformIO $ do exes <- catMaybes `fmap` mapM findExecutable ["ghc-" ++ cProjectVersion, "ghc"] case exes of (exe:_) -> return exe _ -> error $ "No appropriate GHC executable in search path!\n" ++ "Are you sure you have GHC " ++ cProjectVersion ++ " installed?" -- | Path to the GHC binary. ghcPkgBinary :: FilePath ghcPkgBinary = unsafePerformIO $ do exes <- catMaybes `fmap` mapM findExecutable ["ghc-pkg-" ++ cProjectVersion, "ghc-pkg"] case exes of (exe:_) -> return exe _ -> error $ "No appropriate ghc-pkg executable in search path!\n" ++ "Are you sure you have GHC " ++ cProjectVersion ++ " installed?" -- | GHC library directory. ghcLibDir :: FilePath ghcLibDir = unsafePerformIO $ do Right out <- shell $ run ghcBinary ["--print-libdir"] "" return $ init out