【发布时间】:2017-05-13 23:25:07
【问题描述】:
我正在为一个库制作一个 Debian 包,我称之为 libmystuff。它目前是 4.0.0 版本,下一个版本将是 4.1.0,并且可能会破坏 API 兼容性。该项目使用 CMake 构建。
在soname和包名中应该如何处理?
我想将软件包版本最初设为 4.0.0。如果我将包命名为 libmystuff,则会收到一个 lintian 错误,告诉我将包的 soname 放在包名称中 (package-name-doesnt-match-sonames)。很公平。
如果我将包命名为 libmystuff4,那么我会得到一个名为 libmystuff4-dev_4.0.0-1ubuntu8_amd64.deb 的包文件,这似乎有点多余,但没关系,该包适用于主要版本 4,软件版本为 4.0.0。但我仍然收到一个 lintian 错误提示,
libmystuff4: package-name-doesnt-match-sonames libmystuff4.0.0
所以这让我很惊讶,为什么 lintian 要我把 soname 的所有 3 部分都放在包名中,而不是只放第一部分?
不管怎样,所以我把包名改成libmystuff4.0.0,现在lintian就安静了,但是我得到一个包文件叫libmystuff4.0.0_4.0.0-1ubuntu8_amd64.deb,看起来超级多余!
我该怎么办?
我在想,即使库版本是 4.0.0,soname 也应该为 0,我应该在他们发布 4.1.0 时将 soname 设置为 1,等等。这需要修补上游 CMake 构建系统,是这是一种可接受的方法吗?虽然在那种情况下 soname 的其他部分呢,我只是将它们设置为 0 吗?那么这个包就是 soname 0.0.0。
否则我必须在他们发布 4.1.0 时将 soname 更改为 5.0.0,这会很混乱,对吧?
【问题讨论】: