== Detailed Description ==
Upgrading to Mono 5 has been delayed because Mono 5 compiles by
default with csc rather than msc, and makes use of binary reference
assemblies.

Only in the past months an effort was made to build Mono from source,
as described in this upstream issue:
<a href="https://github.com/mono/mono/issues/7445" title="https://github.com/mono/mono/issues/7445">https://github.com/mono/mono/issues/7445</a>
This issue contains a description how the build was done for Debian so
that building from itself is possible, using msc instead of csc, and
rebuilding the reference assemblies from source.

Mono requires itself to build. The Mono version 4.8 currently included
in Fedora is too old to build version 5. At the moment on
[https://copr.fedorainfracloud.org/coprs/tpokorra/mono-5.18/ copr] we
use monolite, a little version of mono compiler, and the .NET 4.7.1
reference assemblies, all shipped in the tarball for first build time.
The sources of the spec file and the required patch files are
currently maintained on
[https://github.com/tpokorra/mono-5.x-fedora/tree/master/mono-5.18
Github].

We would like to request permission to make a one time exception of
the rule for building mono 5.18.0-1 using monolite and the reference
assemblies, later make mono depend again on itself and rebuild mono
5.18.0-2 using mono-5.18.0-1.

Steps for bootstrapping:

* The Monolite binaries are included in the Mono tarball which is
provided by upstream. See also
<a href="http://www.mono-project.com/docs/advanced/monolite/" title="http://www.mono-project.com/docs/advanced/monolite/">http://www.mono-project.com/docs/advanced/monolite/</a>
** Monolite is a minimal binary distribution of mcs. This is the
compiler that is able to build the rest of Mono.
* The binary reference assemblies are included in the Mono tarball
which is provided by upstream. The tarball also includes the sources
of the reference assemblies, which are maintained here:
<a href="https://github.com/dotnet/source-build" title="https://github.com/dotnet/source-build">https://github.com/dotnet/source-build</a>
* In the spec file, we usually delete all dlls and executables before
the build section.
* For the bootstrap, we would once keep the monolite binaries and some
binary reference assemblies.
* In the bootstrap, we rebuild the reference assemblies and include
them in the mono-devel package, as well as the mono compiler.
* After Mono has been built for all primary and secondary
architectures, we enable the deletion of the binaries again in the
spec file.

== Benefit to Fedora ==
Fedora aims to showcase the latest in free and open source software -
we should have the most recent release of Mono 5.x

It will have the ability to run cross-platform applications that
require compatibility with Microsoft .NET Framework 4.7 and later.

We already have issues upgrading packages like sharpziplib because the
latest upstream version uses new compiler features that are not
included in Mono 4.8 (see
<a href="https://bugzilla.redhat.com/show_bug.cgi?id=1601129" title="https://bugzilla.redhat.com/show_bug.cgi?id=1601129">https://bugzilla.redhat.com/show_bug.cgi?id=1601129</a>).

This will also resolve the issues we have because Mono 4.8 does not
build on ppc64 anymore (see
<a href="https://bugzilla.redhat.com/show_bug.cgi?id=1588734" title="https://bugzilla.redhat.com/show_bug.cgi?id=1588734">https://bugzilla.redhat.com/show_bug.cgi?id=1588734</a>).

== Scope ==
* Proposal owners:
Update mono spec and build in copr and/or koji until is ready.
Members of the Mono SIG can rebuild their packages with Mono 5, but
tests with keepass for example show that it works fine without
rebuilding even with Mono 5.18. Rebuild of all packages depending on
Mono can happen during the regular mass rebuild.