2009-04-30 14 views
2

debパッケージとしてUbuntuに1つのRPM(Fedora用)を移植する必要があります。 - それはなぜlnあるdebian/rulesメイクファイルの変数

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

(相対シンボリックリンクが(理由は聞かないでください)禁止されている:私はシンボリックリンクを作成するために、いくつかの変数($RPM_BUILD_ROOT, %{_libdir}, %{name}, %{version})を使用していRPM .specファイルで

コマンドは奇妙に見えます)

したがって、debian/rulesメークファイルのこれらの変数と同等のものは何ですか?

ありがとうございます。

答えて

3

(脇:。これは、その上流の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は相対リンクを作成することに注意してください。

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

:これが問題である場合は、dpkgの新しいバージョン(1.17.0+)で

 cd debian/$(cdbs_curpkg) && ln -s ... 
+0

答えていただきありがとうございます。私はdh_makeのスケルトンだけを使っていました。 CDBSはかなり面白そうです。 –

+0

'dh_make -b'はあなたにスケルトンCDBSルールを与えます。 – ephemient

1

のような本当に厄介なものに頼らなければならないかもしれません、あなたはとの完全なバージョンを取得することができますSHELL := /bin/bashがあると仮定して、sedを使用して部品を抽出する必要はありません。次のようにbash文字列補間を使用してください:

DEBVERSION := $(shell debver="$(DEBVER)"; echo "$${debver%-*}") 
関連する問題