2017-09-30 82 views
1

我有一個測試套件和一個基準測試套件,它使用GHC API將模塊編譯到Core,這樣我就不必編寫Core 'by hand'在測試和基準套件中訪問GHC包數據庫

目前我主要使用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沒有。這個問題的答案應該是這樣的,以便在任何一種情況下打印出適當的包數據庫的路徑。

+1

感謝您的報告,我已經打開此問題:https://github.com/commercialhaskell/stack/issues/3462 – mgsloan

+0

@mgsloan感謝您解決這個問題!儘管如此,我對可用於cabal-install的解決方案感興趣。看看ghc-mod的代碼,我想可能沒有真正的解決方案,但我認爲這種情況真的很煩人,應該有一些這樣的包(如'ghc-paths'),如果有的話生態系統中沒有標準。 –

+0

@mgsloan那麼,最好的解決方法是什麼?我通過'stack'源代碼挖掘並研究瞭如何調用mkGhcPackagePath。好像我不得不暫停一個'EnvConfig'來調用'packageDatabaseLocal'等。最簡單的方法是什麼? –

回答

0

正確的解決方案似乎是使用自定義Setup.hs來堅持在configure之後LocalBuildInfowithPackageDB字段。

幸運的是我發現了cabal-toolkit,其中我修改了版本0.0.3,也與Cabal 1.24(和GHC 8.0.2)to be found here一起使用,直到合併爲止。

獲取packageDBFlags/extraPkgConf只需調用getGHCPackageFlags $(localBuildInfoQ)即可。