2017-09-30 8 views
1

J'ai une suite de tests et une suite benchmark qui utilise l'API GHC pour compiler des modules vers Core, de sorte que je n'ai pas besoin d'écrire Core 'by hand'. J'utilise principalement stack à ce stade, où je pouvais simplement accéder à la variable d'environnement GHC_PACKAGE_PATH dans la suite de tests (stack test) pour trouver une base de données de paquets avec laquelle je peux alimenter l'API GHC. Notez que ce n'est pas tellement que je me soucie de n'importe quel db particulier, je veux juste avoir des modules de par exemple. base disponible, compilé avec une version compatible de GHC (par exemple GHC.Paths.ghc).Accéder à la base de données de packages GHC dans la suite test et benchmark

Tout fonctionne très bien jusqu'à présent, les tests sont verts. Maintenant, si je fais la même chose pour la suite de référence (stack bench), GHC_PACKAGE_PATH ne semble pas être présent du tout. En bref, quelle est la manière la plus fiable de capturer le chemin vers la base de données de paquets GHC avec laquelle le programme a été construit? J'imagine que certains déconner avec Setup.hs pourraient me faire où je veux être.


Edit: Voici quelque chose à jouer avec: https://github.com/sgraf812/ghc-package-path

stack test imprime la valeur de GHC_PACKAGE_PATH, alors que stack bench ne fonctionne pas. Une réponse à cette question devrait faire en sorte qu'un chemin vers une base de données de paquets appropriée soit imprimé dans les deux cas.

+1

Merci pour le rapport, j'ai ouvert ce numéro: https://github.com/commercialhaskell/stack/issues/3462 – mgsloan

+0

@mgsloan Merci d'avoir corrigé ce! Néanmoins, je suis intéressé par une solution qui fonctionne également pour cabal-install. En regardant le code de ghc-mod, il n'y a probablement pas vraiment de solution, je pense, mais je pense que cette situation est vraiment ennuyante et il devrait y avoir une sorte de paquet pour cela (comme 'ghc-paths') s'il y a pas de norme parmi l'écosystème. –

+0

@mgsloan Alors, quelle serait la meilleure solution? J'ai creusé à travers le code source de 'pile' et j'ai regardé comment' mkGhcPackagePath' est appelé. Il semble que je doive me tenir sur un 'EnvConfig' pour appeler' packageDatabaseLocal' et al. Quel serait le moyen le plus facile de le faire? –

Répondre

0

La solution appropriée semble être d'utiliser une coutume Setup.hs persister le champ withPackageDB du LocalBuildInfo après configure. Lucky m'a trouvé cabal-toolkit, dont j'ai modifié la version 0.0.3 pour également travailler avec Cabal 1.24 (et GHC 8.0.2) to be found here jusqu'à ce qu'il soit fusionné.

Obtenir le packageDBFlags/extraPkgConf est juste une question d'appel getGHCPackageFlags $(localBuildInfoQ).