madewokherd / wine-mono

Other
283 stars 38 forks source link

Wine Mono is a package containing Mono and other projects, intended as a replacement for the .NET Framework (4.8 and earlier) in Wine. It works in conjunction with Wine's builtin mscoree.dll, and it is not intended to be useful for any other purpose.

SOURCE CODE

To obtain the source code, clone it from gitlab:

$ git clone --recursive https://gitlab.winehq.org/mono/wine-mono.git

To get to the source code for a specific release, check out the appropriate tag, and update the submodules:

$ git checkout wine-mono-9.0.0 $ git submodule update --init --recursive

Source tarballs and binary packages are available at https://dl.winehq.org/wine/wine-mono/

DEPENDENCIES

To build Wine Mono, you will need the following:

When using the Podman build container, only Podman is required on the host machine.

BUILD

To build Wine Mono, use the msi or bin target.

$ make msi

To use a Podman container, prepend podman- to the build target.

$ make podman-msi

INSTALL

To install Wine Mono, run the generated msi file with msiexec:

$ wine msiexec /i wine-mono-9.0.0-x86.msi

Note that if a Wine Mono with a version number >= to this file is already installed, that command will do nothing, so you may have to remove the existing version (using 'wine uninstaller') first.

If the install succeeds, it won't output anything. You can use 'wine uninstaller' to verify that the version you expect is installed.

If you are building for development, you may find it more convenient to use the 'make dev' target, which builds a runtime in image/ and configures a wine prefix to use it. You can then rebuild individual dlls using their filename with no path. See 'make help' for details.

Packagers should extract the tarball from the "make bin" target to /usr/share/wine/mono or the corresponding directory for the prefix used to configure Wine. This should create a directory named something like /usr/share/wine/mono/wine-mono-9.0.0. This conserves space compared to the msi because it doesn't need to be copied into every prefix.

COMPOSITION

An installed Wine Mono contains the following:

BUGS

Bugs should be filed in the Wine bugzilla (http://bugs.winehq.org/) with product set to "Wine" and component set to "mscoree".

PATCHES

Patches to the top-level project should be sent as a merge request to https://gitlab.winehq.org/mono/wine-mono.

Patches to Mono should be sent as a merge request to https://gitlab.winehq.org/mono/mono. Ideally, most MRs should be for the main branch, which does not contain Wine Mono's modifications. If the change is specific to Wine Wono, then the MR should be for the wine-mono branch.

Changes to upstream projects that make sense only within the context of wine-mono and not for the project's general use case should be sent as a merge request to the appropriate fork in https://gitlab.winehq.org/mono, on the wine-mono branch.

FNA and related projects have been very responsive to pull requests, and it's worth sending changes upstream to https://github.com/FNA-XNA/FNA.

Changes to mono-basic should be sent as a merge request to https://gitlab.winehq.org/mono/mono-basic. However, before doing any substantial work on mono-basic, it may be worth checking whether there's an implementation in https://github.com/dotnet/winforms or https://github.com/dotnet/runtime.

The winforms and wpf projects are not being updated from upstream, and have diverged significantly. Since they are supporting .NET Core, which adds new features and is not binary-compatible with .NET Framework, their use case is very different from ours. Any changes should be sent directly to the appropriate fork, but feel free to also send them upstream if it makes sense.