我有一个测试套件和一个基准测试套件,它使用GHC API将模块编译到Core,这样我就不必编写Core 'by hand'。在测试和基准套件中访问GHC包数据库
目前我主要使用stack
,在这里我可以访问测试套件中的GHC_PACKAGE_PATH
环境变量(stack test
)来查找我可以提供GHC API的包数据库。请注意,这并不是我关心任何特定的数据库,我只是想从例如base
可用,用GHC的兼容版本(例如GHC.Paths.ghc
)编译。
到目前为止一切正常,测试是绿色的。现在,如果我对基准测试套件(stack bench
)做同样的测试,GHC_PACKAGE_PATH
似乎根本不存在。
长话短说,捕获GHC程序包数据库路径的可靠方法是什么?我想象着一些与Setup.hs
有关的东西可能会让我想到我想去的地方。
编辑:下面是一些与玩弄:https://github.com/sgraf812/ghc-package-path
stack test
打印出的GHC_PACKAGE_PATH
价值,而stack bench
没有。这个问题的答案应该是这样的,以便在任何一种情况下打印出适当的包数据库的路径。
感谢您的报告,我已经打开此问题:https://github.com/commercialhaskell/stack/issues/3462 – mgsloan
@mgsloan感谢您解决这个问题!尽管如此,我对可用于cabal-install的解决方案感兴趣。看看ghc-mod的代码,我想可能没有真正的解决方案,但我认为这种情况真的很烦人,应该有一些这样的包(如'ghc-paths'),如果有的话生态系统中没有标准。 –
@mgsloan那么,最好的解决方法是什么?我通过'stack'源代码挖掘并研究了如何调用mkGhcPackagePath。好像我不得不暂停一个'EnvConfig'来调用'packageDatabaseLocal'等。最简单的方法是什么? –