2009-04-30 5 views
2

Мне нужно передать один RPM (сделанный для Fedora) в Ubuntu в качестве пакета deb.Переменные в make-файле debian/rules

В RPM .spec файле я использую несколько переменных ($RPM_BUILD_ROOT, %{_libdir}, %{name}, %{version}), чтобы создать символическую ссылку:

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

(Относительные символьные ссылки запрещены (пожалуйста, не спрашивайте, почему) - вот почему ln команда выглядит странно.)

Итак, каковы эквиваленты этих переменных в make-файле 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 будет относить относительные ссылки, если это возможно, даже если указаны абсолютные пути. Если это проблема, вы, возможно, придется прибегнуть к чему-то очень неприятный, как

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

Благодарим за ответ. Я использовал только скелет из dh_make. CDBS выглядит довольно интересно. –

+0

'dh_make -b' предоставит вам правила CDBS скелета. – ephemient

1

В новых версиях DPKG (1.17.0+), вы можете получить полную версию с:

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

И нет необходимости использовать sed для извлечения частей, если у вас есть SHELL := /bin/bash. Просто используйте интерполяцию строки bash следующим образом:

DEBVERSION := $(shell debver="$(DEBVER)"; echo "$${debver%-*}")