在测试和基准套件中访问 GHC 包数据库

Access GHC package database in test and benchmark suite

我有一个测试套件和一个基准套件,它们使用 GHC API 将模块编译为核心,这样我就不必编写核心 'by hand'.

此时我主要使用 stack,在这里我可以访问测试套件 (stack test) 中的 GHC_PACKAGE_PATH 环境变量来查找我要使用的包数据库可以喂 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 则不会。这个问题的答案应该使得在任何一种情况下都打印出一些适当的包数据库的路径。

正确的解决方案似乎是使用自定义 Setup.hsconfigure 之后保留 LocalBuildInfowithPackageDB 字段。

幸运的是我找到了 cabal-toolkit, of which I modified version 0.0.3 to also work with Cabal 1.24 (and GHC 8.0.2) to be found here 直到它被合并。

获取 packageDBFlags/extraPkgConf 只需调用 getGHCPackageFlags $(localBuildInfoQ).