WineHQ

Multiarch

Revision as of 21:40, 18 March 2016 by RosanneDiMesio (talk | contribs) (remove redundant heading; suppress TOC)

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 late Feb 2016, building wine v1.9.4 on Debian Jessie shows the following build dependencies still conflict across architectures (version info may be different for Ubuntu, Mint, etc.)

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

Debian Package Stable Version Unstable Version Apt-get Result Debian Bug Report Patch Proposed? Fixed in Stretch? Notes
libxml-simple-perl 2.20-1 2.22-1 Package couldn't be found 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
khronos-api 0~svn29577-2~bpo8+1 (Backports) 0~svn29735-1 Package couldn't be found Supersedes parts of dlls/opengl32/make_opengl
libpcap-dev 1.6.2-2 1.7.4-2 Package couldn't be found #760370 Transitional package; pulls in libpcap0.8-dev (not yet multi-arch)
gir1.2-gstreamer-1.0 1.4.4-2 1.6.3-1 Satisfies dependencies, but won't be installed Needed by libgstreamer1.0-dev; see #755874 about multiarch in gobject-introspection
freeglut3-dev 2.8.1-2 2.8.1-2 Other arch will be removed N/A N/A Depends on libglu1-mesa-dev
libatk1.0-dev 2.14.0-1 2.18.0-1 Other arch will be removed #689124 Also depends on libglib2.0-dev
libavahi-client-dev 0.6.31-5 0.6.32~rc+dfsg-1 Other arch will be removed
libavahi-common-dev 0.6.31-5 0.6.32~rc+dfsg-1 Other arch will be removed
libcairo2-dev 1.14.0-2.1 1.14.6-1 Other arch will be removed #689122 Also has deps on libfontconfig1-dev, libfreetype6-dev, & libglib2.0-dev
libfreetype6-dev 2.5.2-3+deb8u1 2.6.1-0.1 Other arch will be removed #666761 See discussion towards end of bug report, plus main report #642354
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.32.3-1.2 Other arch will be removed #689125 Reply to report implies gobject-introspection had priority... but see report #755874 for recent resolution; also needs libglib2.0-dev resolved
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 libglib2.0-dev to resolve
libglib2.0-dev 2.42.1-1 2.46.2-3 Other arch will be removed #683593 Also see merged bug report #648621
libglu1-mesa-dev 9.0.0-2 9.0.0-2.1 Other arch will be removed #689089
libgnutls28-dev 3.3.8-6+deb8u3 3.4.9-2 Other arch will be removed #776841 Package already has Multi-Arch: same; conflict a side-effect of deps on libp11-kit-dev, libtasn1-6-dev, & nettle-dev
libgstreamer1.0-dev 1.4.4-2 1.6.3-1 Other arch will be removed Will also need multiarch in libglib2.0-dev & gir1.2-gstreamer-1.0 to resolve conflict
libgtk2.0-dev 2.24.25-3 2.24.29-1 Other arch will be removed #689097 Partially Several dependencies need multiarch to resolve conflict
libp11-kit-dev 0.20.7-1 0.23.2-3 Other arch will be removed #783700
libpango1.0-dev 1.36.8-3 1.38.1-1 Other arch will be removed #683592 See report #763851 for blocking files
libpulse-dev 5.0-13 8.0-1 Other arch will be removed N/A N/A Partially Already marked Multi-Arch: same; needs multiarch in libglib2.0-dev to resolve
libtasn1-6-dev 4.2-3+deb8u1 4.7-3 Other arch will be removed N/A N/A
libxcomposite-dev 1:0.4.4-1 1:0.4.4-1 Other arch will be removed #689082
libxft-dev 2.3.2-1 2.3.2-1 Other arch will be removed Will also need multiarch in libfreetype6-dev to resolve
libxi-dev 2:1.7.4-1+b2 2:1.7.6-1 Other arch will be removed #689068
nettle-dev 2.7.1-5 3.2-1 Other arch will be removed #783699
unixodbc-dev 2.3.1-3 2.3.1-4 Other arch will be removed

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 18 March 2016, at 21:40.