WineHQ

Multiarch: Difference between revisions

(Strike out two more bugs which are fixed)
(Update build dependencies)
(8 intermediate revisions by 2 users not shown)
Line 12: Line 12:
Perhaps the main (but not only) way this matters to Wine is in regards to building and porting. Once all of Wine's build dependencies are multi-arch compatible, cross-compiling and packaging Wine for different architectures becomes much simpler.
Perhaps the main (but not only) way this matters to Wine is in regards to building and porting. Once all of Wine's build dependencies are multi-arch compatible, cross-compiling and packaging Wine for different architectures becomes much simpler.


As of September 2017, building Wine 2.17 on Debian Stretch shows the following build dependencies still conflicting across architectures (version info may be different for Ubuntu, Mint, etc.)
As of February 2018, building Wine 3.1 on Debian Stretch shows the following build dependencies still conflicting across architectures (version info may be different for Ubuntu, Mint, etc.)


{{Info}} Several of these packages will be fixed in Debian Buster, or only conflict because of dependencies that will be. When Debian Buster is released, we can remove them from the table.
{{Info}} Several of these packages will be fixed in Debian Buster, or only conflict because of dependencies that will be. When Debian Buster is released, we can remove them from the table.
Line 50: Line 50:
| gir1.2-gstreamer-1.0 || 1.4.4-2 || 1.6.3-1
| gir1.2-gstreamer-1.0 || 1.4.4-2 || 1.6.3-1
| Satisfies dependencies, but won't be installed
| Satisfies dependencies, but won't be installed
|
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=904266 #904266]</strike>
| || ||
| {{Check}} || || {{Check}}
| Needed by '''libgstreamer1.0-dev'''; see #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755874 755874] about multiarch in '''gobject-introspection'''
| Needed by '''libgstreamer1.0-dev'''; see <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755874 #755874]</strike> about multiarch in '''gobject-introspection'''
|-
|-
| libatk1.0-dev || 2.22.0-1 || 2.24.0-1
| libatk1.0-dev || 2.22.0-1 || 2.24.0-1
Line 62: Line 62:
| libcairo2-dev || 1.14.0-2.1 || 1.14.6-1
| libcairo2-dev || 1.14.0-2.1 || 1.14.6-1
| Other arch will be removed
| Other arch will be removed
| #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689122 689122]
| <strike>#[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689122 689122]</strike>
| {{Check}} || ||
| {{Check}} || || {{Check}}
| Depends on '''libfontconfig1-dev''' and '''libfreetype6-dev'''
| Depends on '''libfontconfig1-dev''' and '''libfreetype6-dev'''
|-
|-
Line 69: Line 69:
| Other arch will be removed
| Other arch will be removed
| <strike>#[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642354 642354] #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870618 870618]</strike>
| <strike>#[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642354 642354] #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870618 870618]</strike>
| || ||
| {{Check}} || || {{Check}}
|  
|  
|-
|-
Line 75: Line 75:
| Other arch will be removed
| Other arch will be removed
| <strike> #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=677885 677885] </strike>
| <strike> #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=677885 677885] </strike>
| {{Check}} || Partially ||
| {{Check}} || Partially || {{Check}}
| Marked as ''Multi-Arch: same''; conflict due to dep on '''libfreetype6-dev'''
| Marked as ''Multi-Arch: same''; conflict due to dep on '''libfreetype6-dev'''
|-
|-
| libgdk-pixbuf2.0-dev || 2.31.1-2+deb8u4 || 2.36.5-2
| libgdk-pixbuf2.0-dev || 2.31.1-2+deb8u4 || 2.36.5-2
| Other arch will be removed
| Other arch will be removed
| [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689125 #689125] [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=876183 #876183]
|<strike> [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689125 #689125]</strike><strike> [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=876183 #876183]</strike>
| || ||
| {{Check}} || || {{Check}}
| Reply to report implies '''gobject-introspection''' had priority... but see report #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755874 755874] for recent resolution
| Reply to report implies '''gobject-introspection''' had priority... but see report <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755874 #755874]</strike> for recent resolution
|-
|-
| libgirepository1.0-dev || 1.42.0-2.2 || 1.46.0-4
| libgirepository1.0-dev || 1.42.0-2.2 || 1.46.0-4
| Other arch will be removed
| Other arch will be removed
| <strike> #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=801672 801672] </strike>
| <strike> #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=801672 801672] </strike>
|  || ||
|  || ||  
| Again, see #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755874 755874]; also needs multiarch in '''gobject-introspection'''
| Again, see <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755874 #755874]</strike>; also needs multiarch in '''gobject-introspection'''
|-
|-
| libglib2.0-dev || 2.50.3-2 || 2.53.4-3
| libglib2.0-dev || 2.50.3-2 || 2.53.4-3
Line 94: Line 94:
| <strike>#[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683593 683593]</strike>
| <strike>#[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683593 683593]</strike>
| {{Check}} || || {{Check}}
| {{Check}} || || {{Check}}
| Also see merged bug report #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=648621 648621]
| Also see merged bug report <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=648621 #648621]</strike>
|-
|-
| libgnutls28-dev || 3.3.8-6+deb8u3 || 3.4.9-2
| libgnutls28-dev || 3.3.8-6+deb8u3 || 3.4.9-2
Line 104: Line 104:
| libgstreamer1.0-dev || 1.4.4-2 || 1.6.3-1
| libgstreamer1.0-dev || 1.4.4-2 || 1.6.3-1
| Other arch will be removed
| Other arch will be removed
|
|<strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=823307 #823307]</strike>
| || ||
| {{Check}} || || {{Check}}
| Will also need multiarch in '''gir1.2-gstreamer-1.0''' to resolve conflict
| Will also need multiarch in '''gir1.2-gstreamer-1.0''' to resolve conflict
|-
|-
| libgstreamer-plugins-base1.0-dev || 1.12.2-1 || 1.12.2-1
| libgstreamer-plugins-base1.0-dev || 1.12.2-1 || 1.12.2-1
| Other arch will be removed
| Other arch will be removed
|
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862119 #862119]</strike>
| || ||
| {{Check}} || || {{Check}}
| Will also need multiarch in '''libgstreamer1.0-dev''', '''libxml2-dev''' and '''gir1.2-gst-plugins-base-1.0''' to resolve the conflict.
| Will also need multiarch in '''libgstreamer1.0-dev''', '''libxml2-dev''' and '''gir1.2-gst-plugins-base-1.0''' to resolve the conflict.
|-
|-
| libgtk2.0-dev || 2.24.25-3 || 2.24.29-1
| libgtk2.0-dev || 2.24.25-3 || 2.24.29-1
| Other arch will be removed
| Other arch will be removed
| #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689097 689097]
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=689097 #689097]</strike>
| Partially || ||
| Partially || ||  
| Requires '''libgdk-pixbuf2.0-dev''' and '''libpango1.0-dev'''
| Requires '''libgdk-pixbuf2.0-dev''' and '''libpango1.0-dev'''
|-
|-
Line 123: Line 123:
| Other arch will be removed
| Other arch will be removed
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837898 #837898]</strike>
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837898 #837898]</strike>
| || ||
| || || {{Check}}
|  
|  
|-
|-
Line 134: Line 134:
| libpango1.0-dev || 1.36.8-3 || 1.38.1-1
| libpango1.0-dev || 1.36.8-3 || 1.38.1-1
| Other arch will be removed
| Other arch will be removed
| #[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683592 683592]
| [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683592 #683592]
|  || ||
|  || || {{Check}}
| Requres '''libgraphite2-dev''' and '''libicu-dev''' via '''libharfbuzz-dev'''
| Requres '''libgraphite2-dev''' and '''libicu-dev''' via '''libharfbuzz-dev'''
|-
|-
Line 147: Line 147:
| Package couldn't be found
| Package couldn't be found
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872087 #872087 ] </strike>
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872087 #872087 ] </strike>
| {{Check}} || ||
| {{Check}} || || {{Check}}
|  
|  
|-
|-
Line 153: Line 153:
| Package couldn't be found
| Package couldn't be found
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872088 #872088 ] </strike>
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872088 #872088 ] </strike>
| {{Check}} || ||
| {{Check}} || || {{Check}}
|  
|  
|-
|-
| libxft-dev || 2.3.2-1 || 2.3.2-1
| libxft-dev || 2.3.2-1 || 2.3.2-1
| Other arch will be removed
| Other arch will be removed
|
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=884176 #884176]</strike>
| || ||
| {{Check}} || || {{Check}}
| Will also need multiarch in '''libfreetype6-dev''' to resolve
| Will also need multiarch in '''libfreetype6-dev''' to resolve
|-
|-
Line 171: Line 171:
| Other arch will be removed
| Other arch will be removed
|
|
| || ||
| || || {{Check}}
| Requires '''libicu-dev''' to resolve.
| Requires '''libicu-dev''' to resolve.
|-
|-
| libxslt1-dev || 1.1.29-2.1 || 1.1.29-2.1
| libxslt1-dev || 1.1.29-2.1 || 1.1.29-2.1
| Other arch will be removed
| Other arch will be removed
|  
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=834714 #834714]</strike>
|  || ||
|  || || {{Check}}
| Already marked ''Multi-Arch: same''; requires '''libxml2-dev''' to resolve.
| Already marked ''Multi-Arch: same''; requires '''libxml2-dev''' to resolve.
|-
|-
Line 189: Line 189:
| Other arch will be removed
| Other arch will be removed
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872411 #872411]</strike>
| <strike>[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=872411 #872411]</strike>
| {{Check}} || ||
| {{Check}} || || {{Check}}
|
|
|}
|}

Revision as of 11:12, 29 January 2019

What is Multiarch?

In order to ease cross-compiling and distribution, the Debian-based distros have undertaken a project known as "multi-arch." The idea is to update the packaged software itself, and occasionally change how it's built, so that every package can satisfy multiple architectures. Either one version of the package will work for all architectures, or the different architectures' versions can be installed alongside each other.

To be fully compliant, a package not only needs to play well with different architectures, but explicitly state how it operates in a multi-arch environment. This is implemented through values in the control file of each source package, which are then enforced by the distro's package management.

While there are general guidelines, each package has its own dynamic so making it multi-arch compatible is largely up to that package's maintainer. As a result, multi-arch is still a work in progress, and the distros prioritize which packages they focus on.

According to documents from ca. 2013, multi-arch behavior for header-files (common in -dev packages) was undefined. Since then, the Debian-family distros have settled on using subdirectories for multi-arch triplets within /usr/include/. Note that this extension is not yet part of the Filesystem Hierarchy Standard.

Status of Wine Build Dependencies

Perhaps the main (but not only) way this matters to Wine is in regards to building and porting. Once all of Wine's build dependencies are multi-arch compatible, cross-compiling and packaging Wine for different architectures becomes much simpler.

As of February 2018, building Wine 3.1 on Debian Stretch shows the following build dependencies still conflicting across architectures (version info may be different for Ubuntu, Mint, etc.)

Several of these packages will be fixed in Debian Buster, or only conflict because of dependencies that will be. When Debian Buster is released, we can remove them from the table.

Debian Package Stable Version Unstable Version Apt-get Result Debian Bug Report Patch Proposed? Fixed in Stretch? Fixed in Buster? Notes
libxml-simple-perl 2.22-1 2.24-1 Package couldn't be found #869758 Outdated, only used once in dlls/opengl32/make_opengl; consider move to libxml-libxml-simple-perl... or rewrite make_opengl for new tools
oss4-dev 4.2-build2010-2 4.2-build2010-5 Package couldn't be found Necessary for OSS sound-driver support in Wine. Replaced by ALSA.
khronos-api 0~svn29735-1.1 0~svn33340-0.1 Package couldn't be found #865308 Supersedes parts of dlls/opengl32/make_opengl
libpcap-dev 1.8.1-3 1.8.1-4 Package couldn't be found #760370 Transitional package; pulls in libpcap0.8-dev
gir1.2-gstreamer-1.0 1.4.4-2 1.6.3-1 Satisfies dependencies, but won't be installed #904266 Needed by libgstreamer1.0-dev; see #755874 about multiarch in gobject-introspection
libatk1.0-dev 2.22.0-1 2.24.0-1 Other arch will be removed #689124 Also depends on libglib2.0-dev
libcairo2-dev 1.14.0-2.1 1.14.6-1 Other arch will be removed #689122 Depends on libfontconfig1-dev and libfreetype6-dev
libfreetype6-dev 2.6.3-3.2 2.8-0.2 Other arch will be removed #642354 #870618
libfontconfig1-dev 2.11.0-6.3 2.11.0-6.3 Other arch will be removed #677885 Partially Marked as Multi-Arch: same; conflict due to dep on libfreetype6-dev
libgdk-pixbuf2.0-dev 2.31.1-2+deb8u4 2.36.5-2 Other arch will be removed #689125 #876183 Reply to report implies gobject-introspection had priority... but see report #755874 for recent resolution
libgirepository1.0-dev 1.42.0-2.2 1.46.0-4 Other arch will be removed #801672 Again, see #755874; also needs multiarch in gobject-introspection
libglib2.0-dev 2.50.3-2 2.53.4-3 Other arch will be removed #683593 Also see merged bug report #648621
libgnutls28-dev 3.3.8-6+deb8u3 3.4.9-2 Other arch will be removed #776841 Package is already marked as Multi-Arch: same; requires nettle-dev and libidn2-dev to resolve
libgstreamer1.0-dev 1.4.4-2 1.6.3-1 Other arch will be removed #823307 Will also need multiarch in gir1.2-gstreamer-1.0 to resolve conflict
libgstreamer-plugins-base1.0-dev 1.12.2-1 1.12.2-1 Other arch will be removed #862119 Will also need multiarch in libgstreamer1.0-dev, libxml2-dev and gir1.2-gst-plugins-base-1.0 to resolve the conflict.
libgtk2.0-dev 2.24.25-3 2.24.29-1 Other arch will be removed #689097 Partially Requires libgdk-pixbuf2.0-dev and libpango1.0-dev
libicu-dev 57.1-6 59.1-1 Other arch will be removed #837898
libidn2-dev 0.16-1 2.0.2-5 Other arch will be removed #872550
libpango1.0-dev 1.36.8-3 1.38.1-1 Other arch will be removed #683592 Requres libgraphite2-dev and libicu-dev via libharfbuzz-dev
libpulse-dev 10.0-1+deb9u1 10.0-2 Other arch will be removed N/A N/A Partially Already marked Multi-Arch: same; needs multiarch in libglib2.0-dev to resolve
liburi-perl 1.71-1 1.72-1 Package couldn't be found #872087
libwww-perl 6.15-1 6.15-2 Package couldn't be found #872088
libxft-dev 2.3.2-1 2.3.2-1 Other arch will be removed #884176 Will also need multiarch in libfreetype6-dev to resolve
libxml-parser-perl 2.44-2 2.44-2 Requires dependencies Requires perl, perl-base, liburi-perl and libwww-perl to resolve.
libxml2-dev 2.9.4+dfsg1-2.2 2.9.4+dfsg1-3 Other arch will be removed Requires libicu-dev to resolve.
libxslt1-dev 1.1.29-2.1 1.1.29-2.1 Other arch will be removed #834714 Already marked Multi-Arch: same; requires libxml2-dev to resolve.
nettle-dev 3.3-1 3.3-2 Other arch will be removed #856160 Partially Conflicts in /usr/include/nettle/version.h.
unixodbc-dev 2.3.4-1 2.3.4-1 Other arch will be removed #872411

I determined these packages by simulating apt-get build-dep with i386 build-dependencies for the (Debian unstable) version of wine-development:

apt-get -s build-dep wine-development/unstable -a i386

At first, this would return an error for some package; to bypass the error, I used apt-get source to grab the package source, quickly entered a "Multi-Arch: foreign" key into the control file, then rebuilt and installed it. After repeating this for a few packages, the simulated apt-get completed. I didn't need these packages to actually work, only to install and allow apt-get to give a full build-dep list.

See Also

Some of these pages might be out of date, but they're still good places to start:

This page was last edited on 29 January 2019, at 11:12.