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

Haskell 访问测试和基准测试套件中的GHC包数据库,haskell,ghc,cabal,haskell-stack,ghc-pkg,Haskell,Ghc,Cabal,Haskell Stack,Ghc Pkg,我有一个测试套件和一个基准套件,它使用GHCAPI将模块编译为核心,这样我就不必编写核心 此时,我主要使用stack,在这里我可以访问测试套件(stack test)中的GHC_PACKAGE_PATH环境变量来找到一个包数据库,我可以用它为GHC API提供数据。请注意,我并不太关心任何特定的db,我只想让来自例如base的模块可用,并使用兼容版本的GHC(例如)编译 到目前为止一切正常,测试是绿色的。现在,如果我对基准测试套件(stack bench)也这样做,GHC_PACKAGE_PAT

我有一个测试套件和一个基准套件,它使用GHCAPI将模块编译为核心,这样我就不必编写核心

此时,我主要使用
stack
,在这里我可以访问测试套件(
stack test
)中的
GHC_PACKAGE_PATH
环境变量来找到一个包数据库,我可以用它为GHC API提供数据。请注意,我并不太关心任何特定的db,我只想让来自例如
base
的模块可用,并使用兼容版本的GHC(例如)编译

到目前为止一切正常,测试是绿色的。现在,如果我对基准测试套件(
stack bench
)也这样做,
GHC_PACKAGE_PATH
似乎根本不存在

长话短说,获取程序构建时使用的GHC包数据库路径的可靠方法是什么?我想在
Setup.hs上乱搞一下可能会让我达到我想要的位置


编辑:这里有一些东西可以玩:


堆栈测试
打印出
GHC\U包路径的值
,而
堆栈测试台
不打印。这个问题的答案应该是这样的,即在任何情况下都会打印出某个适当的包数据库的路径。

正确的解决方案似乎是使用自定义
设置。hs
配置
之后保留
LocalBuildInfo
字段

幸运的是我找到了,我修改了版本0.0.3,使其也能与Cabal 1.24(和GHC 8.0.2)一起工作,直到它被合并


获取
packageDBFlags
/
extraPkgConf
只需调用
getGHCPackageFlags$(localBuildInfoQ)
正确的解决方案似乎是在
configure
之后使用自定义的
Setup.hs
保存
LocalBuildInfo
字段

幸运的是我找到了,我修改了版本0.0.3,使其也能与Cabal 1.24(和GHC 8.0.2)一起工作,直到它被合并


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

感谢您的报告,我打开了这个问题:@mgsloan感谢您修复这个问题!尽管如此,我还是对一个同样适用于阴谋集团安装的解决方案感兴趣。查看ghc mod的代码,我认为可能没有真正的解决方案,但我认为这种情况真的很烦人,如果生态系统中没有标准,那么应该有一些解决方案(如
ghc路径
)?我翻阅了
堆栈
源代码,查看了
mkGhcPackagePath
是如何调用的。似乎我必须先获得一个
EnvConfig
来调用
packageDatabaseLocal
等。最简单的方法是什么?也许我最好只解析
堆栈路径的结果--ghc包路径
?是的,解析这似乎是最好的方法。感谢您的报告,我已打开此问题:@mgsloan感谢您修复此问题!尽管如此,我还是对一个同样适用于阴谋集团安装的解决方案感兴趣。查看ghc mod的代码,我认为可能没有真正的解决方案,但我认为这种情况真的很烦人,如果生态系统中没有标准,那么应该有一些解决方案(如
ghc路径
)?我翻阅了
堆栈
源代码,查看了
mkGhcPackagePath
是如何调用的。似乎我必须控制一个
EnvConfig
来调用
packageDatabaseLocal
等。最简单的方法是什么?也许我最好只解析
堆栈路径的结果--ghc包路径
?是的,解析这似乎是最好的方法。