5

我必须将一个 RPM(为 Fedora 制作)作为 deb 包移植到 Ubuntu。

在 RPM .spec 文件中,我使用了几个变量 ( $RPM_BUILD_ROOT, %{_libdir}, %{name}, %{version}) 来创建符号链接:

%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )

(禁止使用相对符号链接(请不要问为什么)——这就是ln命令看起来很奇怪的原因。)

debian/rules那么, makefile中这些变量的等价物是什么?

提前致谢。

4

2 回答 2

4

(旁白:这似乎是上游 Makefile 应该做的事情,而不是下游打包。)

取决于您为rules文件使用的框架。

CDBS中,这样的东西应该可以工作......

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
# probably what you want (automagic happens),
# but I don't know details of your package
#include /usr/share/cdbs/1/class/automake.mk

DEBVERS := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p')
VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[[:digit:]]*://' -e 's/[~-].*//')

install/$(DEB_ALL_PACKAGES)::
        dh_link -p$(cdbs_curpkg) \
                /usr/lib/$(cdbs_curpkg)-$(VERSION)/$(cdbs_curpkg) \
                /usr/bin/$(cdbs_curpkg)

如果您有更好的获取版本的方法(例如$(shell cat version.txt))),请使用它。Debian 版本并不总是源包版本;在这里,我去掉了时代和包装版本,如果有的话,但这并不总是正确的。

其他 CDBS 类可能会定义$${libdir}and $${bindir},但我没有看到任何常见的东西。

请注意dh_link,即使给定绝对路径,也会尽可能建立相对链接。如果这是一个问题,你可能不得不求助于一些非常讨厌的东西,比如

        cd debian/$(cdbs_curpkg) && ln -s ...
于 2009-04-30T04:06:14.630 回答
2

在较新版本的 dpkg (1.17.0+) 中,您可以获得完整版本:

DEBVER := $(shell dpkg-parsechangelog -SVersion)

假设您有SHELL := /bin/bash. 只需像这样使用 bash 字符串插值:

DEBVERSION := $(shell debver="$(DEBVER)"; echo "$${debver%-*}")
于 2015-03-21T22:48:34.573 回答