回答
使用cabalvchk:http://hackage.haskell.org/package/cabalvchk-0.2
例如,验证秒差距的版本为> = 0.4,你可以发出:
$ cabalvchk parsec '>= 0.4'
返回代码将是零,如果版本满足约束条件否则不为零。版本约束可以是cabal理解的任何东西。可选的第三个参数可以是非空白的以请求详细输出。
我不知道很多关于configure
;你能让它运行一个特定的命令吗?如果是这样,那么ghc-pkg latest
应该帮助你。例如,下面是为zlib
包在我的机器上运行:
% ghc-pkg latest zlib
zlib-0.5.3.1
% ghc-pkg latest --global zlib
zlib-0.5.3.1
% ghc-pkg latest --user zlib
ghc-pkg: cannot find package zlib
zsh: exit 1 ghc-pkg latest --user zlib
的--global
应该用于整个系统的安装,并没有任何标志在所有的用户特定的设备。 --user
标志只应在您想检查用户是否具有本地安装包(可能会覆盖全局包)时使用。
除非您有理由不这样做,否则我建议开沟configure
以支持cabal
。对于cabal
,该解决方案在这里是先cabal init
在项目的目录,然后检查是否有在.cabal
文件这样一行时创建的:
build-depends: zlib >= 0.5
的cabal
工具链是Haskell的项目标准(因为它自动化和简化许多事情,包括依赖追逐)。如果还有其他依赖关系,您还可以请求cabal
调用configure
。如果您想了解更多关于此的信息,请另外打个问题。
感谢您的回答。我已经使用ghc-pkg,但我不知道说'我需要版本> = x.y'。使用'configure'的原因是haskell脚本是主要用python编写的更大程序的一部分,所有的依赖关系已经通过configure进行管理。 –
使用ghc-pkg list
,您可以按照升序获取软件包的已安装版本列表。您应该希望能够通过此列表筛选寻找匹配项。 (我不知道怎么做,configure
,对不起)。
$ ghc-pkg list yesod
/home/ahammar/.haskell/lib/ghc-7.0.2/package.conf.d
/home/ahammar/.ghc/x86_64-linux-7.0.2/package.conf.d
yesod-0.8.2.1
yesod-0.9.1
yesod-0.9.2.2
尝试这样:
# Find ghc-pkg, so we can do version checks
AC_ARG_VAR([GHC_PKG], [Path to ghc-pkg])
AC_PATH_PROG([GHC_PKG], [ghc-pkg])
AS_IF([test -z "$GHC_PKG"], [AC_MSG_ERROR([Cannot find ghc-pkg.])])
# Check that the package actually exists
AC_MSG_CHECKING([for Haskell package foo])
AS_IF([$GHC_PKG latest foo > /dev/null 2>&1],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([Cannot find foo])])
# Check its version
AC_MSG_CHECKING([if foo is new enough])
foo_ver=`$GHC_PKG latest foo | sed 's/^foo-//'`
# At this point you have the version of foo and the minimum version you want.
# The rest of the test is pretty easy to write, use cut and test to compare the
# version numbers. If it's new enough, AC_MSG_RESULT([yes]).
# If not, AC_MSG_RESULT([no]) and AC_MSG_ERROR([foo is not new enough.])
也许更好的问题是:你应该?检查特定的版本号是autoconf世界的重要参数之一,辩论的总冠军是说你永远不应该这样做的一面。你需要什么Haskell特性?测试一下。作为一个简单的例子(与haskell无关),假设你的程序使用inotify,所以你想让configury测试它是否可用。你可以测试内核版本是否大于2.6.13,但是当Joe试图在他的2.4.xx版本上构建你的程序时,他已经修复了inotify的能力,他会非常烦恼你的程序不会工作。
你不关心Haskell> x.y是否可用。相反,Haskell的某些特定功能需要在x.y中引入;测试该功能。
- 1. Haskell软件包版本
- 2. Nix shell:如何列出已安装的Haskell软件包版本
- 3. 如何强制Mac软件包安装程序检查版本?
- 4. Linux软件安装 - 覆盖./configure中的库版本
- 5. 安装前检查可用的pip软件包版本
- 6. 检查已安装版本的R软件包并更新旧版本
- 7. 如何知道旧Fedora版本的最新软件包版本
- 8. 如何查找与特定库版本对应的软件包
- 9. 如何查看堆栈安装的软件包版本?
- 10. r检查软件包版本是否大于x.y.z
- 11. Serverspec不正确检查软件包版本
- 12. Pinning R软件包版本
- 13. Node.js - NPM软件包版本
- 14. 预测软件包版本
- 15. 如何安装d3js Haskell软件包?
- 16. spacemacs中的回滚软件包版本
- 17. 版本控制中的Oracle软件包?
- 18. python软件包:如何依赖最新版本的单独软件包
- 19. 如何确保我的Haskell软件包与LTS Haskell相匹配?
- 20. 如何查找Haskell名称的包,版本和文档
- 21. haskell软件包:base与haskel98
- 22. 在package.json中设置软件包版本
- 23. nixpkgs中的haskell软件包在哪里?
- 24. 独立版本库中的Java软件包比其他版本
- 25. 如何在Yocto -older版本中使用最新的软件包版本?
- 26. 如何在Ansible中定义要安装的软件包版本
- 27. 如何查找在Ubuntu中降级的软件包的早期版本?
- 28. 如何查找SSIS 2008 R2软件包中使用的.NET框架版本?
- 29. Indermediate sub-patch Node.js软件包的版本
- 30. 确定特定软件包的版本
这确实很酷,即使它意味着我必须引入新的依赖关系。 –
谢谢!从长远来看,我可以请求cabal工具人员直接将此功能添加到cabal中,这样可以减少依赖性,但是这种额外的依赖性对于您的直接需求是必需的。 –