Переменные в make-файле debian/rules

Мне нужно перенести один 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?

Заранее спасибо.


person Alexander Gromnitsky    schedule 30.04.2009    source источник


Ответы (2)


(Кроме того: это похоже на то, что должен делать вышестоящий 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 ...
person ephemient    schedule 30.04.2009
comment
Спасибо за ответ. Я использовал только скелет из dh_make. CDBS выглядит довольно интересно. - person Alexander Gromnitsky; 30.04.2009
comment
dh_make -b предоставит вам основные правила CDBS. - person ephemient; 30.04.2009

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

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

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

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