Переменные в файле debian/rules makefile
Вопрос
Мне нужно перенести один 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, а не нижестоящая упаковка.)
Зависит от того, какой фреймворк вы используете для своего 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)
И нет необходимости использовать sed для извлечения деталей, при условии, что у вас есть SHELL := /bin/bash
.Просто используйте интерполяцию строк bash следующим образом:
DEBVERSION := $(shell debver="$(DEBVER)"; echo "$${debver%-*}")