質問
1つのRPM(Fedora用)をUbuntuにdebパッケージとして移植する必要があります。
RPM .specファイルでは、いくつかの変数( $ RPM_BUILD_ROOT、%{_ libdir}、%{name}、%{version}
)を使用してシンボリックリンクを作成しています:
%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )
(相対シンボリックリンクは禁止されています(理由を聞かないでください)-それが ln
コマンドが奇妙に見える理由です。)
では、 debian / rules
makefileの変数と同等のものは何ですか?
事前に感謝します。
解決
(さておき:これは、ダウンストリームパッケージではなく、アップストリーム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}
および $$ {bindir}
を定義するかもしれませんが、一般的なものは見ていません。
dh_link
は、絶対パスを指定した場合でも、可能であれば相対リンクを作成することに注意してください。これが問題である場合、次のような本当に厄介なものに頼らなければならないかもしれません
cd debian/$(cdbs_curpkg) && ln -s ...
他のヒント
dpkgの新しいバージョン(1.17.0以降)では、次のコマンドでフルバージョンを入手できます。
DEBVER := $(shell dpkg-parsechangelog -SVersion)
また、 SHELL:= / bin / bash
がある場合、sedを使用してパーツを抽出する必要はありません。次のようにbash文字列補間を使用します。
DEBVERSION := $(shell debver="$(DEBVER)"; echo "${debver%-*}")