1

我有一个测试套件和一个基准套件,它们使用 GHC API 将模块编译为 Core,这样我就不必“手动”编写 Core 。

我现在主要使用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没有。这个问题的答案应该使得在任何一种情况下都可以打印出一些适当的包数据库的路径。

4

1 回答 1

0

正确的解决方案似乎是使用自定义Setup.hs来保留after的withPackageDB字段。LocalBuildInfoconfigure

幸运的是我找到cabal-toolkit了,我修改了 0.0.3 版本,使其也可以与 Cabal 1.24(和 GHC 8.0.2)一起使用,直到它被合并。

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

于 2017-11-20T10:56:03.790 回答