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

时间:2017-09-30 17:00:09

标签: haskell ghc cabal haskell-stack ghc-pkg

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

此时我主要使用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则没有。int SLL_pop(struct List *list) { /* remove and return the first item of the list */ struct Node *node = list->head; int item = node->item; list->head = node->next; if (SLL_empty(list)) { list->tail = NULL; } free(node); return item; } int SLL_getID(struct List *list) { /* returns ID of head node */ struct Node *node = list->head; int id = node->id; if (SLL_empty(list)) { return NULL; } return id; } 。对这个问题的回答应该使得在任何一种情况下打印出一些适当的包数据库的路径。

1 个答案:

答案 0 :(得分:0)

正确的解决方案似乎是使用自定义Setup.hsLocalBuildInfo之后保留configure的{​​{3}}字段。

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

获取packageDBFlags / extraPkgConf只需要致电getGHCPackageFlags $(localBuildInfoQ)