我有一个测试套件和一个基准套件,它使用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;
}
。对这个问题的回答应该使得在任何一种情况下打印出一些适当的包数据库的路径。
答案 0 :(得分:0)
正确的解决方案似乎是使用自定义Setup.hs
在LocalBuildInfo
之后保留configure
的{{3}}字段。
幸运的是我找到了withPackageDB
,其中我修改了版本0.0.3以便与Cabal 1.24(和GHC 8.0.2)cabal-toolkit
一起使用,直到它合并为止。
获取packageDBFlags
/ extraPkgConf
只需要致电getGHCPackageFlags $(localBuildInfoQ)
。