首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何传递某个项目所依赖的库列表?

如何传递某个项目所依赖的库列表?
EN

Stack Overflow用户
提问于 2017-06-23 19:58:13
回答 1查看 131关注 0票数 1

我主要对基于堆栈构建的项目的这个问题感兴趣。

我通过编写一个脚本来解决这个问题,该脚本分析命令的输出,如ghc-pkg field SOMEPKG hs-libraries等。

但是这种方法相当慢,主要是因为使用堆栈命令从项目中提取信息。

有没有其他方法可以不用很多工具来解决这个问题呢?

编辑

这是剧本草稿。

代码语言:javascript
复制
main = do
    pkgSet <- newIORef . asHashSet $ mempty
    libSet <- newIORef . asHashSet $ mempty
    let proc ghcId pkgId = do
            guard =<< (liftIO . map (pkgId `notMember`) . readIORef $ pkgSet)
            liftIO . modifyIORef pkgSet $ insertSet pkgId

            libDir1 <- lineToText <$> inproc "ghc-pkg"
                ["--simple-output", "field", pkgId, "dynamic-library-dirs"]
                (pure "")
            libDir2 <- lineToText <$> inproc "ghc-pkg"
                ["--simple-output", "field", pkgId, "library-dirs"] (pure "")
            libDir <- select . filter (not . null) $ [libDir1, libDir2]
            lib <- select =<< (map (words . lineToText) $ inproc "ghc-pkg"
                ["--simple-output", "field", pkgId, "hs-libraries"] (pure ""))
            let libPath = asText . repack $ repack libDir
                      </> (shlibPrefix ++ repack lib ++ "-" ++ repack ghcId)
                      <.> shlibSuffix

            guard =<< (liftIO . map (libPath `notMember`) . readIORef $ libSet)
            guard =<< (liftIO . doesFileExist . repack $ libPath)
            liftIO . modifyIORef libSet $ insertSet libPath

            dep <- select =<< (map (words . lineToText) $ inproc "ghc-pkg"
                ["--simple-output", "field", pkgId, "depends"] (pure ""))
            proc ghcId dep
    sh $ do
        ghcPkgPath <- lineToText <$> inshell "stack path --ghc-package-path" (pure "")
        export "GHC_PACKAGE_PATH" ghcPkgPath

        ghcVer <- lineToText <$> inshell "stack exec -- ghc --numeric-version" (pure "")
        let ghcId = "ghc" ++ ghcVer

        [pkg, ver] <- words . lineToText <$> inshell "stack list-dependencies" (pure "")
        let pkgId = pkg ++ "-" ++ ver
        proc ghcId pkgId
    -- processing libSet
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-23 20:52:06

代码语言:javascript
复制
$ stack list-dependencies
MonadPrompt 1.0.0.5
MonadRandom 0.4
StateVar 1.1.0.1
...

对于阴谋项目,请尝试cabal freeze --help

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44729092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档