module GHC.Check.PackageDb where
import Control.Monad.Trans.Class as Monad (MonadTrans (lift))
import Data.Maybe (fromMaybe)
import Data.String (IsString (fromString))
import Data.Version (Version)
import GHC (setSessionDynFlags, runGhc, getSessionDynFlags, Ghc)
import GHC.Exts (IsList (fromList), toList)
import Maybes (MaybeT (MaybeT), runMaybeT)
import Module (componentIdToInstalledUnitId)
import PackageConfig (PackageName (PackageName))
import Packages (lookupInstalledPackage, lookupPackageName)
import Packages (InstalledPackageInfo (packageVersion))
getPackageVersion :: String -> Ghc (Maybe Version)
getPackageVersion packageName = runMaybeT $ do
dflags <- Monad.lift getSessionDynFlags
component <- MaybeT $ return $ lookupPackageName dflags $ PackageName $ fromString packageName
p <- MaybeT $ return $ lookupInstalledPackage dflags (componentIdToInstalledUnitId component)
return $ packageVersion p
getPackageVersionIO :: FilePath -> String -> IO (Maybe Version)
getPackageVersionIO libdir package = runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
_ <- setSessionDynFlags dflags
getPackageVersion package