Re: Building i386 RPMs on x86_64

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dave Atkinson wrote:
On Thu, 2005-09-15 at 07:42 +0100, Paul Howarth wrote:

On Wed, 2005-09-14 at 19:13 +0100, Dave Atkinson wrote:

Sorry if this issue's been addresses before (is there an effective way
to search fedora mailing lists?).

I've been trying to build some i386 RPMs on my x86_64 machine using

$ rpmbuild -ba --target i386 <spec file>

and it seems that this gives me library directories for 64-bit
libraries.  Specifically the %configure macro sets _libdir to
%{prefix}/lib64, but it should be %{prefix}/lib for i[3456]86 etc.

Am I missing something?

Try "man setarch"


Aha! Well, I certainly missed that! However
$ setarch i386 rpmbuild -ba --target i386 <spec file>

builds <package>.rpm, but I still get

$ rpm -qlp <package>.rpm
...
/usr/lib64/...
/usr/lib64/...
...

Looking at /usr/lib/rpm/macros, from line 865 (rpm-4.4.1-22.x86_64) I
see the following:
[snip]
#==============================================================================
# ---- per-platform macros.
#       Macros that are specific to an individual platform. The values
here
#       will be used if the per-platform macro file does not exist..
#
%_arch                  x86_64
%_build_arch            x86_64
%_vendor                redhat
%_os                    linux
%_gnu                   -gnu
%_target_platform       %{_target_cpu}-%{_vendor}-%{_target_os}%{?_gnu}
[snip]

and sure enough, there are no platform-specific macros for archs other
than x86_64 and noarch on the FC4 x86_64 install.
$ rpm -ql rpm | grep '/usr/lib/rpm/.*-linux'
/usr/lib/rpm/noarch-linux
/usr/lib/rpm/noarch-linux/macros
/usr/lib/rpm/x86_64-linux
/usr/lib/rpm/x86_64-linux/macros

It just so happens I have the FC4 i386 install on another disk (this
whole exercise is about trying to get rid of it ;).  Looking at the
files installed on that:

$ rpm --dbpath /oldsys/var/lib/rpm -qil rpm|grep '/usr/lib/rpm/.*-linux'
/usr/lib/rpm/athlon-linux
/usr/lib/rpm/athlon-linux/macros
/usr/lib/rpm/i386-linux
/usr/lib/rpm/i386-linux/macros
/usr/lib/rpm/i486-linux
/usr/lib/rpm/i486-linux/macros
/usr/lib/rpm/i586-linux
/usr/lib/rpm/i586-linux/macros
/usr/lib/rpm/i686-linux
/usr/lib/rpm/i686-linux/macros
/usr/lib/rpm/noarch-linux
/usr/lib/rpm/noarch-linux/macros
/usr/lib/rpm/pentium3-linux
/usr/lib/rpm/pentium3-linux/macros
/usr/lib/rpm/pentium4-linux
/usr/lib/rpm/pentium4-linux/macros

I tried copying the ones that didn't exist in x86_64 and re-running

$ setarch i386 rpmbuild -ba --target i386 rpms/SPECS/<package>.spec
$ rpm -qlp rpms/RPMS/i386/<package>.i386.rpm
...
/usr/lib64/...
/usr/lib64/...
...

but the libs _still_ get installed in /usr/lib64!

Anyone else think I should file a bug for this?  I think it would also
be nice if rpmbuild --showrc would respect --target.  At present, I get
this:

$ rpmbuild --showrc --target i386 | egrep '(_lib[[:space:]])|
optflags.*:'
optflags              : %{__global_cflags} -m64 -mtune=nocona
-14: _lib       lib64

which doesn't seem right to me.

I would use mock to do this. It'll sort out all of these issues for you and also help you to find any missing buildrequires in your packages.

http://fedoraproject.org/wiki/Legacy/Mock

Paul.


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux