Building RPM packages for multiple platforms

I would like to create one single RPM package that depending on the architecture of the system that is installed (i.e. i386 or x86_64), it installs platform-specific files.

For example, I have some configuration files only (no compiling required) that I want to package. If the RPM would be installed on x86, the files would go under /usr/lib ; if the RPM would be installed on x86_64, the files would go under /usr/lib64.

Currently, I have in the …/SOURCES directory the following structure:


Is it possible to have just one RPM, that can handle this ? Meaning for example, could my RPM have all these files packaged, but when it’s installed on x86, it would only install:


In the .spec file I have defined:

%ifarch i386 i486 i586 i686

%ifarch x86_64

However, I realized that this applies only at the build time.
When I run

rpmbuild -ba --target=i586 ./foo_rpm.spec

it creates a foo_rpm.i586.rpm package.

Then I have to run once more

rpmbuild -ba --target=x86_64 ./foo_rpm.spec

to create a foo_rpm.x86_64.rpm package.

Would be nice if a single foo_rpm RPM package would contain all files for both architectures, but installs only the files applicable for the system it is being installed on.

Just use the %{_libdir} variable in your spec file. Config files don’t
go in the library hierarchy though? Your manually building these, if
you used the build service it has separate build for the arch’s.

Cheers Malcolm °¿° (Linux Counter #276890)
SUSE Linux Enterprise Desktop 11 (x86_64) Kernel
up 16:05, 2 users, load average: 0.08, 0.07, 0.07
GPU GeForce 8600 GTS Silent - Driver Version: 185.18.14