Troubleshooting openSUSE's packaging process

Alexander Leithner <[email protected]> Thu, 3 Apr 2025 17:13:58 +0200
Newsgroups gmane.comp.emulators.wine.devel
Message-ID <[email protected]>
Hi all,

back in October [1] I asked for advice on building Winelib DLLs because 
I was unable to compile 64-bit DLLs on my openSUSE Tumbleweed machine. 
I've since opened bug 1231820 [2] on openSUSE's Bugzilla that has yet to 
be resolved (which I understand, given that developing Wine-only 
applications is pretty niche, I reckon).

While I can now (with Wine 10.0 from openSUSE's repositories) compile 
32-bit Winelib DLLs without having to explicitly specify the library 
search path, 64-bit DLLs still don't work. This is because the packages 
are missing the relevant archive files (*.a) for 64-bit ELF; that is, 
all the libraries (*.so) are present in /usr/lib64/wine/x86_64-unix, but 
the corresponding *.a files are not.

I was trying to troubleshoot this earlier today but I'm now lost (since 
I cannot, for the life of me, reproduce the build process behaviour) and 
would be grateful for any discussion of what I might be 
misunderstanding/doing wrong or what might be going wrong with the 
packaging process.

The first noteworthy observation is that the RPM spec file [3, see lines 
367-449] excludes all archive files when the package built is not the 
"-devel" variant, which is fine, but only includes the i386-unix 
archives when "-devel" is built. That is probably an oversight, but not 
the main problem, I reckon.

Namely: The x86_64-unix *.a files do not show up in the build logs [4] 
at all (Ctrl-F for "unix/libwinecrt0.a", for example). Even more, RPM 
itself complains that the files it should exclude are not found when 
building the non-devel variant of the package (Ctrl-F for "not found", 
messages around the 999s mark). This, to me, indicates that the files 
aren't even built.

As can be seen in the logs, openSUSE uses the following ./configure 
command line to build 64-bit Wine:

../configure --host=x86_64-suse-linux --build=x86_64-suse-linux 
--program-prefix= [...] --with-x --with-wayland --with-gstreamer 
--enable-win64 --verbose

(I've omitted prefix- and dir-related switches). I've built Wine from 
source with the following command line:

../configure [...] --build=x86_64-suse-linux --build=x86_64-suse-linux 
--enable-win64

(I've omitted --prefix only here). This produces an environment which 
can correctly build both 32-bit as well as 64-bit Winelib DLLs (without 
needing to set -L explicitly, as expected). I can see install-sh calls, 
as expected, for the *.a files in lib64/x86_64-unix, which are absent 
from the OBS build logs.

My commandline generates lib64/x86_64-unix and lib64/x86_64-windows.

On the other hand, the openSUSE build log for wine-devel-32bit [5] shows 
the i386-unix archive files being generated and installed. For 32-bit, 
they're using:

../configure --host=i586-suse-linux --build=i586-suse-linux 
--program-prefix= [...] --with-x --with-wayland --with-gstreamer --verbose

Since I don't expect --with-x --with-wayland --with-gstreamer --verbose 
to change anything on whether archive files are built, how come the 
64-bit build on OBS is not providing these *.a for x86_64-unix?

I posted some more commandlines which don't seem to work correctly to 
the linked Bugzilla issue [2] back in December. I'm unsure if any of 
those I've tried there should be expected to produce correct results, so 
I'm focused on understanding of what's wrong with the 64-bit OBS build.

Thanks for any insight, advice, pointers, or corrections you might have 
for me.

Regards,
Alexander Leithner



[1]: 
https://list.winehq.org/mailman3/hyperkitty/list/[email protected]/thread/QTPFXY3CHG2TJUPBNE3CGXIKBFRH5CPH/
[2]: https://bugzilla.opensuse.org/show_bug.cgi?id=1231820
[3]: 
https://build.opensuse.org/projects/openSUSE:Factory/packages/wine/files/wine.spec?expand=1
[4]: 
https://build.opensuse.org/public/build/openSUSE:Factory/standard/x86_64/wine/_log
[5]: 
https://build.opensuse.org/public/build/openSUSE:Factory/standard/i586/wine/_log