Variables dans le fichier makefile / rules
Question
Je dois porter un RPM (conçu pour Fedora) sur Ubuntu en tant que paquet deb.
Dans le fichier .spec RPM, j'utilise plusieurs variables ( $ RPM_BUILD_ROOT,% {_ libdir},% {name},% {version}
) pour créer un lien symbolique:
%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )
(Les liens symboliques relatifs sont interdits (merci de ne pas demander pourquoi) - c'est pourquoi la commande ln
a l'air étrange.)
Alors, quels sont les équivalents de ces variables dans le fichier makefile debian / rules
?
Merci d'avance.
La solution
(De plus: cela semble être quelque chose que le Makefile en amont devrait faire, au lieu de l’emballage en aval.)
Dépend du framework que vous utilisez pour votre fichier rules
.
Dans CDBS , quelque chose comme cela devrait fonctionner ...
#!/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)
Si vous avez un meilleur moyen d'obtenir la version (par exemple, $ (shell cat version.txt))
), utilisez-le. La version de Debian n’est pas toujours la version du paquet source; Ici, je décape la version d’époque et d’emballage, le cas échéant, mais ce n’est pas toujours correct.
D'autres classes CDBS pourraient définir $$ {libdir}
et $$ {bindir}
, mais je n'ai rien vu de commun.
Notez que dh_link
créera des liens relatifs si possible, même avec des chemins absolus. Si cela pose un problème, vous devrez peut-être recourir à quelque chose de vraiment méchant, comme
cd debian/$(cdbs_curpkg) && ln -s ...
Autres conseils
Dans les versions plus récentes de dpkg (1.17.0+), vous pouvez obtenir la version complète avec:
DEBVER := $(shell dpkg-parsechangelog -SVersion)
Et il n'est pas nécessaire d'utiliser sed pour extraire les pièces, en supposant que vous ayez SHELL: = / bin / bash
. Il suffit d’utiliser une interpolation de chaîne bash comme ceci:
DEBVERSION := $(shell debver="$(DEBVER)"; echo "${debver%-*}")