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.