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 debian / rules ?

Gracias de antemano.

¿Fue útil?

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%-*}")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top