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.