How to package code compiled with 'gcc -m32'?

Richard W.M. Jones rjones at redhat.com
Tue Oct 7 16:56:09 UTC 2008


On Tue, Oct 07, 2008 at 11:12:09AM -0400, Jeremy Katz wrote:
> On Tue, 2008-10-07 at 14:35 +0100, Richard W.M. Jones wrote:
> > I've got a nasty program I'm trying to package for Fedora.  To cut a
> > very long story short, this C/C++ mixed program started out on Windows
> > and makes lots of 32 bit assumptions.  So it's compiled with 'gcc -m32'.
> > 
> > Expressing the build requirements so it can build on a 64 bit platform
> > is proving troublesome.  (It builds fine on i386).
> 
> In general, for these situations the right answer is to ExcludeArch and
> file the appropriate tracking bugs rather than trying to do 32-bit
> builds on a 64-bit arch.  The latter is only done in a few special cases
> (bootloaders mainly) which don't have any external deps

The issues is actually weirder / more complicated than I thought.
(But hey, Windows software, what do you expect :-)

It turns out that it's not just built for 32 bit because of the
general hideousness of the code, but because it builds Windows 32 bit
plugins.  Somehow -- and I've no idea how it does this -- the Windows
plugins get loaded into the native Fedora binary at runtime.  Even
though the main binary is Fedora native, it still has to be built as
32 bit to achieve this minor miracle.

The package is NSIS, in case you were wondering ...

http://hg.et.redhat.com/misc/fedora-mingw--devel/?cmd=manifest;manifest=d9257c5046c7e63b8c00d01528031f14cf6fc319;path=/nsis/

http://www.annexia.org/tmp/mingw/fedora-9/x86_64/RPMS/mingw32-nsis-2.39-3.fc9.x86_64.rpm

$ file /usr/bin/makensis 
/usr/bin/makensis: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
$ file /usr/share/nsis/Stubs/zlib
/usr/share/nsis/Stubs/zlib: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
$ strace makensis --help 2>&1 | egrep '(Plugins|Stubs)'
open("/usr/share/nsis/Stubs/zlib", O_RDONLY) = 3
open("/usr/share/nsis/Stubs/uninst", O_RDONLY) = 3

I guess if we ExcludeArch we'll still be OK because x86-64 users will
be able to install and use the i386 version?

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top




More information about the fedora-devel-list mailing list