我正在试图弄清楚Macports如何比较两个版本以确定哪一个是最近的版本,但我无法找到任何相关的文档。例如,portfile reference没有任何关于此的详细信息。我问,因为我正在尝试打包除正常版本之外还使用补丁版本的应用程序。这让我想知道Macports是否支持与Gentoo ebuild类似的系统,其中可以指定其他版本信息,例如1.2_alpha1
< 1.2_alpha2
< 1.2_beta
< 1.2_rc3
< 1.2
< 1.2_p1
(http://devmanual.gentoo.org/ebuild-writing/file-format/)。
是否有表格描述Macports使用的系统?或者它是否仅支持基本的点分隔版本控制方案(例如1.2.1
)?
答案 0 :(得分:2)
的MacPorts'版本号比较基于RPM的原始算法。它目前不支持使1.2 > 1.2$something
的修饰符。在比较两个版本字符串时,除了分隔函数之外,忽略非字母数字字符。这使1.2.3 == 1-2_3
。
要解决您的问题,您可以使用epoch
字段,每当版本号移动时,您都需要增加该字段,并且#34;向后"根据MacPorts'版本比较算法。
为了将来参考,版本比较的源代码位于https://svn.macports.org/repository/macports/trunk/base/src/pextlib1.0/vercomp.c。如果您需要测试两个版本号,而无需手动运行此代码,则可以使用Ryan's vercmp script。请注意,他的脚本目前尚未更新,无法使用MacPorts'新捆绑的tclsh。固定版本如下:
#!/usr/bin/env port-tclsh
# Runs vercmp with the two version numbers provided to see which is newer.
package require macports 1.0
mportinit
if {${argc} != 2} {
ui_error "usage: [file tail ${argv0}] version1 version2"
exit 1
}
set version1 [lindex ${argv} 0]
set version2 [lindex ${argv} 1]
set cmp [vercmp ${version1} ${version2}]
if {${cmp} < 0} {
ui_msg "MacPorts considers ${version1} to be less than ${version2}."
} elseif {${cmp} > 0} {
ui_msg "MacPorts considers ${version1} to be greater than ${version2}."
} else {
ui_msg "MacPorts considers ${version1} to be equal to ${version2}."
}