Le lun. 6 sept. 2021 à 18:36, Zebediah Figura <zfig...@codeweavers.com> a écrit :
> On 9/6/21 1:57 AM, Stephen Kitt wrote: > > On Sun, 5 Sep 2021 12:14:47 -0500, Zebediah Figura < > zfig...@codeweavers.com> > > wrote: > >> On 9/5/21 11:19 AM, Stephen Kitt wrote: > >>> On Sat, 4 Sep 2021 20:17:53 -0500, Zebediah Figura > >>> <zfig...@codeweavers.com> wrote: > >>>> I'm a contributor to the Wine project. To summarize the following > mail, > >>>> Wine needs special versions of some of its normal dependencies, such > as > >>>> libfreetype and libgnutls, built using the MinGW cross-compiler, and > I'm > >>>> sending out a mail to major distributions in order to get some > feedback > >>>> from our packagers on how these should be built and packaged. > >>>> > >>>> For a long time Wine has built all of its Win32 libraries (DLLs and > >>>> EXEs) as ELF binaries. For various reasons related to application > >>>> compatibility, we have started building our binaries as PE instead, > >>>> using the MinGW cross-compiler. It is our intent to expand this to > some > >>>> of our dependencies as well. The list of dependencies that we intend > to > >>>> build using MinGW is not quite fixed yet, but we expect it to include > >>>> and be mostly limited to the following: > >>>> > >>>> * libvkd3d > >>>> * libFAudio > >>>> * libgnutls > >>>> * zlib (currently included via manual source import) > >>>> * libmpg123 > >>>> * libgsm > >>>> * libpng > >>>> * libjpeg-turbo > >>>> * libtiff > >>>> * libfreetype > >>>> * liblcms2 > >>>> * jxrlib > >>>> > >>>> and dependencies of the above packages (not including CRT > dependencies, > >>>> which Wine provides). > >>>> > >>>> There is currently some internal discussion about how these > dependencies > >>>> should be built and linked. There are essentially three questions I > see > >>>> that need to be resolved, and while these resolutions have a > significant > >>>> impact on the Wine building and development process, they also have an > >>>> impact on distributions, and accordingly I'd like to get input from > our > >>>> packagers to ensure that their considerations are accurately taken > into > >>>> account. > >>>> > >>>> (1) Should we build via source import, or link statically, or > >>>> dynamically? > >>>> > >>>> Source imports are dispreferred by Debian [1], on the grounds that > they > >>>> cause duplication of libraries on disk and in memory, and make it > harder > >>>> to handle security updates. They also make building and bisecting > >>>> harder. Static libraries don't seem to be expressly discouraged, but > >>>> share most of the same downsides (see also [2]). > >>>> > >>>> Note however that if they are linked dynamically, we need to make sure > >>>> that we load our packages instead of MinGW builds of open-source > >>>> libraries with applications ship with. There's some internal > discussion > >>>> about whether this is possible while using "stock" builds of MinGW > >>>> libraries, but, due to the way the Win32 loader works, we will > probably > >>>> need to compile each library, and its dependencies, with a separate, > >>>> wine-specific name, e.g. "libwinefreetype-6.dll" and > >>>> "libwineharfbuzz.dll". For a detailed explantion see footnote [3]. > Note > >>>> that all we actually need to change is the name; we don't need to > patch > >>>> the source. > >>> > >>> Assuming Debian provides the dependencies (which is currently true only > >>> for zlib), this could be handled in packaging by providing symlinks, > >>> couldn’t it? Not in the Wine prefixes, but elsewhere. > >> > >> Almost :-/ > >> > >> Copying/symlinking libfreetype-1.dll to libwinefreetype-1.dll is easy. > >> The problem is that libwinefreetype-1.dll is still going to link to > >> libharfbuzz-1.dll, but we need it to link to libwineharfbuzz-1.dll. > > > > Ah yes, I hadn’t thought it through. So really Wine needs its own > parallel > > ecosystem of DLLs in any case, which effectively means building them > along > > with Wine (from Wine’s perspective, ignoring distribution constraints and > > preferences). > > > >>> This also works in Debian: > >>> > >>> $ sudo apt install libz-mingw-w64-dev mingw-w64-tools > >>> $ x86_64-w64-mingw32-pkg-config --libs zlib > >>> -L/usr/x86_64-w64-mingw32/lib -lz > >> > >> Ah, cool, I looked for that and somehow missed it. > >> > >> Note that's the wrong path for dynamic libraries, though; those go in > >> /usr/x86_64-w64-mingw32/bin/. We'll need a way to find those. Maybe > >> hardcoding a list won't be too painful, though... > > > > In Debian they go in /usr/x86_64-w64-mingw32/lib currently, which is why > > the .pc file points there. But as you point out, that doesn’t help at > > runtime. > > > > Also, having pkg-config support doesn’t really help with a parallel set > of > > DLLs, does it? > > I mean... eh. In theory you could say "here's a library called > libwinefreetype, and to find it you do `pkg-config --cflags --libs > libwinefreetype`", but that does strike me as more than a little janky. > > > > >>>> For what it's worth, the current proposed solution (which has the > >>>> support of the Wine maintainer) involves source imports and > submodules. > >>>> There's probably room for changing our approach even after things are > >>>> committed, but I'd still like to get early feedback from > distributions, > >>>> and make sure that their interests are accurately represented, before > we > >>>> commit. > >>> > >>> Realistically, I think this is the best approach for now. As Debian > adds > >>> support for PE libraries, we can replace the source imports in the Wine > >>> source code; this is done in many other Debian packages for projects > which > >>> vendor dependencies. > > > > I still think this is true. With requirement for a Wine-specific set of > DLLs, > > improving the situation in Debian would involve supporting source > > build-dependencies, i.e. being able to say that a given package wants > access > > to the source code of another package. That’s something that’s been > brought > > up previously, and is worked around by providing binary packages > containing > > package source code (e.g. binutils-source, gcc-11-source etc.), but isn’t > > really upstream’s concern, in that it’s a Debian implementation detail. > > > > Going back to your original three questions, I think that the best > approach > > for you as upstream is to focus on providing a complete set of source > code > > (including dependencies) which works, and to make it friendlier to > > distributions, make the build process capable of handling alternative > > locations for the dependencies’ source code or even build artifacts. > (This > > has a number of knock-on effects — in particular, you should ensure that > the > > upstream source code for all your dependencies works with Wine, i.e. that > > Wine doesn’t require Wine-specific patches to any of its dependencies.) > > > > Given how varied MinGW-w64 handling is in different distributions, > pushing > > things further risks making it easier for one distribution and harder > for the > > others... > > Thanks for the detailed response! > > It's probably worth pointing out that: > > (1) if we use static linking, we should be able to use distribution > libraries unmodified. Of course, static linking comes with its own > downsides... > > (2) Like I mentioned or hinted at in my original email, it *may* be > possible to use distribution dynamic libraries unmodified. It's not > clear that it can be done without breaking compatibility, but if it can, > would that change anything? > Yes i really prefer (2) it means we could use multiarch easilly.... Please try to document thé blocking point. > > ἔρρωσθε, > Zebediah > >