Skip to content

Commit e793727

Browse files
committed
Add findLibDir function
1 parent a23f5ad commit e793727

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

src/Stack/GhcPkg.hs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import Data.Set (Set)
3939
import qualified Data.Set as S
4040
import qualified Data.Set.Monad as Set
4141
import Data.Streaming.Process
42+
import Data.Text (Text)
4243
import qualified Data.Text as T
4344
import qualified Data.Text.Encoding as T
4445
import Path (Path, Abs, Dir, toFilePath, parent, parseAbsDir)
@@ -306,6 +307,37 @@ findGhcPkgId menv pkgDbs name = do
306307
stripCR t =
307308
fromMaybe t (T.stripSuffix "\r" t)
308309

310+
-- | Get the library directory of the package
311+
-- e.g. @/opt/ghc/7.8.4/lib/ghc-7.8.4/base-4.7.0.2@.
312+
findLibDir :: (MonadIO m, MonadLogger m)
313+
=> EnvOverride
314+
-> [Path Abs Dir] -- ^ package databases
315+
-> PackageName
316+
-> m (Maybe (Path Abs Dir))
317+
findLibDir menv pkgDbs name = do
318+
result <-
319+
ghcPkg menv pkgDbs ["describe", packageNameString name]
320+
case result of
321+
Left{} ->
322+
return Nothing
323+
Right lbs -> do
324+
let mpid =
325+
fmap
326+
T.unpack
327+
(listToMaybe
328+
(mapMaybe
329+
(fmap stripCR .
330+
T.stripPrefix "library-dirs: ")
331+
(map T.decodeUtf8 (S8.lines lbs))))
332+
case mpid of
333+
Just !p ->
334+
return (parseAbsDir p)
335+
_ ->
336+
return Nothing
337+
where
338+
stripCR t =
339+
fromMaybe t (T.stripSuffix "\r" t)
340+
309341
-- | Get all current package ids.
310342
getGhcPkgIds :: (MonadIO m, MonadLogger m)
311343
=> EnvOverride

0 commit comments

Comments
 (0)