Haskell:针对Hackage的多个版本的基础测试包

时间:2011-12-27 14:52:35

标签: haskell base cabal

我正在尝试将我的第一个包上传到Hackage(是的!),我收到了这个错误:

  

依赖项'build-depends:base'未指定版本号的上限。 'base'包的每个主要版本都以各种方式更改API,大多数包需要进行一些更改才能使用它进行编译。建议的做法是指定“base”包版本的上限。这可以确保在发布新的主要版本的“基础”软件包时,您的软件包将继续构建。如果您不确定要使用的上限,请使用下一个主要版本。例如,如果您使用'base'版本2和3测试了包,那么请使用'build-depends:base> = 2&& < 4' 。

这似乎是拒绝我的包裹的完全可接受的理由。

是否有一个很好的工具来测试我的包对各种版本的base所以我可以看到界限是什么(而不仅仅是猜测)?我能想到的最好的方法是使用一些shell脚本来执行以下操作:

% for v in $BASE_VERSIONS
do
  cabal install base-$v &&\
  cabal configure --enable-tests &&\
  cabal build &&\
  cabal test && echo "$v ok" || echo "$v fail"
done

但我觉得应该有更好的东西。

1 个答案:

答案 0 :(得分:9)

这是一个非常糟糕的主意!您必须升级基础或any other packages that come with GHC(标记列中包含-的那些),否则一切都会崩溃。

使用旧版本的基础进行测试的唯一方法是安装较旧的GHC并进行测试。我建议在7.0.4和7.2.2上尝试一下;如今,支持旧版本可能是浪费时间。

如果不这样做,只需指定base >= VERSION && < 5,其中VERSION是GHC的版本。或base == 4.*并希望最好:)

严肃地说,base的API并没有真正改变那么多,所以你不太可能遇到很多问题。

为了在不影响主~/.cabal存储库的情况下使用各种版本的软件包测试您的程序,我强烈建议cabal-dev;

之类的东西
$ cabal-dev install 'pkg==VERSION'
$ cabal-dev install
$ cabal-dev test

应该这样做。

顺便说一句,在将您的软件包上传到Hackage之前,您可以cabal check收到有关此类问题的警告。