Variables en debian / rules makefile
Pregunta
Tengo que portar un RPM (hecho para Fedora) a Ubuntu como un paquete deb.
En el archivo .spec RPM, estoy usando varias variables ( $ RPM_BUILD_ROOT,% {_ libdir},% {name},% {version}
) para crear un enlace simbólico:
%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )
(los enlaces simbólicos relativos están prohibidos (no preguntes por qué), por eso el comando ln
parece extraño)
Entonces, ¿cuáles son los equivalentes de esas variables en el
Gracias de antemano.
Solución
(Aparte: Esto parece algo que debería estar haciendo Makefile en sentido ascendente, en lugar del empaquetado en sentido descendente.)
Depende del marco que esté utilizando para su archivo rules
.
En CDBS , algo como esto debería funcionar ...
#!/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 tiene una mejor manera de obtener la versión (por ejemplo, $ (shell cat version.txt))
), úsela. La versión de Debian no es siempre la versión del paquete fuente; Aquí, elimino la versión de época y de empaquetado, si la hay, pero esto no siempre es correcto.
Otras clases de CDBS podrían definir $$ {libdir}
y $$ {bindir}
, pero no he visto nada en común.
Tenga en cuenta que dh_link
creará enlaces relativos si es posible, incluso cuando se den rutas absolutas. Si esto es un problema, es posible que tenga que recurrir a algo realmente desagradable como
cd debian/$(cdbs_curpkg) && ln -s ...
Otros consejos
En las versiones más recientes de dpkg (1.17.0+), puede obtener la versión completa con:
DEBVER := $(shell dpkg-parsechangelog -SVersion)
Y no hay necesidad de usar sed para extraer las partes, asumiendo que tienes SHELL: = / bin / bash
. Simplemente use la interpolación de cadenas de bash así:
DEBVERSION := $(shell debver="$(DEBVER)"; echo "${debver%-*}")