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

Andrew Haley aph at redhat.com
Tue Oct 7 17:01:35 UTC 2008


Richard W.M. Jones wrote:
> 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?

Weirder still.  How does zlib get built anyway?

Andrew.




More information about the devel mailing list