RPM peut maintenant être utilisé pour construire des paquetages pour intel 386, le Digital Alpha faisant tourner linux, et le Sparc. Il a été signalé qu'il fonctionnait aussi bien sur des stations de travail SGI et HP. De nombreuses options permettent de construire des paquetages sur toutes les plateformes facilement. La première de celles-ci est la directive "optflags" dans /etc/rpmrc. Elle peut être utilisée pour positionner des options utilisés durant la compilation concernant des valeurs spécifiques à l'architecture. Elles peuvent être utilisées pour faire différentes choses qui dépend de l'architecture sur laquelle vous compilez. Une fonctionnalité est la directive "Exclude" dans le header.
La partie qui suit est extraite du fichier spec pour le paquetage fileutils. Il est paramétré pour compiler aussi bien sur Alpha que sur Intel.
Summary: GNU File Utilities
Name: fileutils
Version: 3.16
Release: 1
Copyright: GPL
Group: Utilities/File
Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
Source1: DIR_COLORS
Patch: fileutils-3.16-mktime.patch
%description
These are the GNU file management utilities. It includes programs
to copy, move, list, etc, files.
The ls program in this package now incorporates color ls!
%prep
%setup
%ifarch alpha
%patch -p1
autoconf
%endif
%build
configure --prefix=/usr --exec-prefix=/
make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s
%install
rm -f /usr/info/fileutils*
make install
gzip -9nf /usr/info/fileutils*
Dans cet exemple, vous pouvez voir comment la directive "optflags" est utilisée dans le /etc/rpmrc. Selon l'architecture sur laquelle vous compilez, la valeur est donnée à RPM_OPT_FLAGS. Vous devez patcher le Makefile pour votre paquetage pour utiliser cette variable à la place des directives normales que vous utilisez probablement (comme -m486 et -O2). Vous pouvez obtenir un meilleur aspect de ce dont vous avez à faire par l'installation du paquetage source, la décompression de celui-ci et l'examen du Makefile. Ensuite regardez au patch pour le Makefile et voyez les changements à faire.
la macro %ifarch est très important pour tout cela. LA plupart du temps vous autre besoin de faire un patch ou deux qui sera spécifique à une architecture seulement. Dans ce cas, RPM va vous permettre d'appliquer ce patch uniquement sur cette architecture.
Dans l'exemple plus haut, fileutils a un patch pour les machines 64 bits. Manifestement, cela doit uniquement être appliqué sur Alpha à ce jour. Donc, on ajoute une macro %ifarch pour le patch 64 bits comme suit:
%ifarch axp
%patch1 -p1
%endif
Cela garantira que le patch ne sera pas appliqué sur une autre architecture que Alpha.Comme vous pouvez maintenir les RPMs sources dans un répertoire pour toutes les plateformes, nous avons implémenté la capacité d'exclure des paquetages d'être compilées sur certaines architectures. C'est ce que vous pouvez faire avec quelque chose comme
rpm --rebuild /usr/src/SRPMS/*.rpm
et vous obtenez les vrais paquetages compilés. Si vous n'avez pas encore porté une application sur une certaine platefome, tout ce que vous devez faire est une ligne comme:
ExcludeArch: axp
à l'en-tête du fichier spec des paquetages source. Ensuite recompilez les paquetages sur les plateformes sur lesquelles il compile. Vous aurez alors un paquetage source qui compile sur Intel et peut facilement être sauté sur Alpha.
Utilisez RPM pour construire des paquetages multi-architectures est habituellement plus simple à faire que d'obtenir du paquetage lui-même qu'il compile sur des architectures différentes. Aussi plus les paquetages compilent difficilement plus vous obtiendrez de facilité (Ndt: ?). Comme toujours, la meilleure aide quand la construction d'un RPM vous pose problème est de regarder un paquetage source similaire.