我如何使用自定义插件“cabal install”hackage 上的每个包
How can I `cabal install` every package on hackage with a custom plugin
我正在定制 ghc plugin。为了测试它,我想 运行 它在 hackage 的每个包上。我 运行为此遇到了两个困难。
首先,我需要在安装包时将-fplugin=MyPlugin
选项传递给ghc。我发现这样做的唯一方法是创建包含以下内容的文件 myghc.sh
:
#!/bin/sh
ghc -fplugin=MyPlugin $@
然后是运行cabal install --with-compiler=./myghc.sh
。但是当我 运行 该命令时,我得到错误
Could not find module 'MyPlugin'
it is a member of the hidden package...
那么是否有一个特殊的标志可以传递给 cabal install
以使用我的插件而无需修改每个包的 cabal 文件?
其次,我希望我的插件记录有关它正在编译的包的信息,所以我需要一种方法让我的包知道这些信息。
看起来可能有很多方法可以做到这一点,但这是我到目前为止想到的。我想要一个订购的 hackage 包列表,以便包的所有依赖项都保证在列表中出现在它之前?然后,当我 运行 cabal install
时,我可以将它正在安装的包的名称传递给插件。由于依赖项已经安装,我不必担心它们会以错误的名称安装。
我不确定第二部分,但第一部分应该可以通过 cabal 的命令行标志实现:
cabal install --ghc-option=-fplugin=MyPlugin
我正在定制 ghc plugin。为了测试它,我想 运行 它在 hackage 的每个包上。我 运行为此遇到了两个困难。
首先,我需要在安装包时将-fplugin=MyPlugin
选项传递给ghc。我发现这样做的唯一方法是创建包含以下内容的文件 myghc.sh
:
#!/bin/sh
ghc -fplugin=MyPlugin $@
然后是运行cabal install --with-compiler=./myghc.sh
。但是当我 运行 该命令时,我得到错误
Could not find module 'MyPlugin'
it is a member of the hidden package...
那么是否有一个特殊的标志可以传递给 cabal install
以使用我的插件而无需修改每个包的 cabal 文件?
其次,我希望我的插件记录有关它正在编译的包的信息,所以我需要一种方法让我的包知道这些信息。
看起来可能有很多方法可以做到这一点,但这是我到目前为止想到的。我想要一个订购的 hackage 包列表,以便包的所有依赖项都保证在列表中出现在它之前?然后,当我 运行 cabal install
时,我可以将它正在安装的包的名称传递给插件。由于依赖项已经安装,我不必担心它们会以错误的名称安装。
我不确定第二部分,但第一部分应该可以通过 cabal 的命令行标志实现:
cabal install --ghc-option=-fplugin=MyPlugin