我正在尝试将我的第一个包上传到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
但我觉得应该有更好的东西。
答案 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
收到有关此类问题的警告。