2017-09-30 63 views
1

我有一个测试套件和一个基准测试套件,它使用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没有。这个问题的答案应该是这样的,以便在任何一种情况下打印出适当的包数据库的路径。

+1

感谢您的报告,我已经打开此问题:https://github.com/commercialhaskell/stack/issues/3462 – mgsloan

+0

@mgsloan感谢您解决这个问题!尽管如此,我对可用于cabal-install的解决方案感兴趣。看看ghc-mod的代码,我想可能没有真正的解决方案,但我认为这种情况真的很烦人,应该有一些这样的包(如'ghc-paths'),如果有的话生态系统中没有标准。 –

+0

@mgsloan那么,最好的解决方法是什么?我通过'stack'源代码挖掘并研究了如何调用mkGhcPackagePath。好像我不得不暂停一个'EnvConfig'来调用'packageDatabaseLocal'等。最简单的方法是什么? –

回答

0

正确的解决方案似乎是使用自定义Setup.hs来坚持在configure之后LocalBuildInfowithPackageDB字段。

幸运的是我发现了cabal-toolkit,其中我修改了版本0.0.3,也与Cabal 1.24(和GHC 8.0.2)to be found here一起使用,直到合并为止。

获取packageDBFlags/extraPkgConf只需调用getGHCPackageFlags $(localBuildInfoQ)即可。