RPM macros

A partir de RPM 3.0, los RPM macros han remplazado la mayoría de los ajustes de los archivos rpmrc.

Un macro RPM define un ajuste en el sistema RPM. Un macro puede ser definido como un valor estático, tal como el directorio donde la base de datos RPM es instalada. Un macro también puede ser definido en términos de otros macros. Aún más, un macro puede ser definido con parámetros.

Por ejemplo, las siguientes líneas definen dos macros en un archivo macro:

%_usr /usr
%_usrsrc %{_usr}/src

En este caso el macro %_usr refiere al directorio /usr. El macro %_usrsrc refiere al directorio /usr/src mostrando como definir un macro en términos de otro macro.

Definición de macros

RPM provee varios lugares donde se pueden definir los macros, ello incluye los archivos spec (probablemente el uso más común), archivos especiales de inicialización macro y en la línea de comandos. En cada caso la sintaxis es ligeramente distinta.

Definiendo macros en archivos spec

Se pueden definir macros en la mayoría de los lugares de un archivo spec. Con achivos spec use la sintaxis %define para definir un macro. También puede usar %global .

%define name(options) body
%global gemname gstreamer

La opciones son opcionales y pueden incluir los valores especiales incluidos en la siguiente tabla.

Opción Mantiene
%0 El nombre del macro
%1 El primer argumento, después de procesar con getopt
%2-%9 Argumentos adicionales
%* Todos los argumentos, excepto las banderas que han sido procesadas
%# Cantidad de argumentos

Estas opciones son similares a las del shell scripting.

Ademas de estas opciones se puede usar la sintaxis %{-a} para mantener –a si se pasa un opción -a.

La sintaxis %{-a*} indica el valor pasado después de la opción -a.

Usted puede asignar un macro a un valor devuelto por un comando shell usando la sintaxis como la siguiente:

%(shell_command)

Denifiendo macros en archivos de inicialización macro

Dentro de un archivo macro, defina macros con la siguiente sintaxis:

%macro_name value

Los macros definidos para el sistema RPM comienzan con un guión bajo (underscore). Algunos macros antiguos aún se mantienen sin el guión bajo como prefijo.

Nota: Los macros definidos con un guión bajo no son exportados en los encabezados rpm.

El macro %expand embutido expandirá el valor de algo más, incluyendo un comando shell. Por ejemplo, lo siguiente define el macro %home al valor del directorio personal del usuario:

%home %{expand:%%(cd; pwd)}

Note que probablemente es más fácil definir %home en su archivo $HOME/.rpmmacros con el nombre de su directorio personal en vez de hacerlo progamáticamente.

Definiendo macros en la línea de comandos

El comando rpm también le permite definir macros con la opción --define. La sintaxis básica es:

$ rpm --define 'macro_name value'

Nota: no coloque el signo de porcentaje de prefijo (%) en el macro definido con --define.

Usted puede evaluar un macro o expresión macro usando --eval, por ejemplo:

$ rpm --eval %_usrsrc
/usr/src

Personalizando con macros

Usted puede agregar sus propias definiciones de macros como se ha descrito en la sección de definición de macros en archivo de inicialización. Dichos macros son leídos en cada invocación de los comandos rpm y rpmbuild..

Para agregar sus macros personalizados usted debe editar uno de los archivos de definición de macros. La siguiente tabla lista los archivos de definición de macros y su uso.

Archivo Uso
/usr/lib/rpm/macros Macros RPM oficiales
/etc/rpm/macros Personalización del sistema
$HOME/.rpmmacros Personalización del usuario

Nota: no edite el archivo /usr/lib/rpm/macros ya que este archivo se sobrescribe con las actualizaciones de rpm.