Building mono from source

From LSDevLinux
Revision as of 13:34, 9 February 2015 by Mayhewn (talk | contribs) (Expand and update instructions)

Jump to: navigation, search

We use a custom version of mono that has a number of patches applied relative to the official, "upstream" mono releases. We have forks of the various git repos involved, and a branch named develop in each of these. This branch is based on an official upstream release with additional commits for each of our patches.


On Ubuntu or Debian Linux

$ sudo apt-get install gnulib mono-devel mono-mcs libgif-dev libjpeg-dev libtiff4-dev libexif-dev git quilt

And of course to build the package you'll also need:

$ sudo apt-get install devscripts cdbs

On Mac

$ sudo port install bison mono giflib git-core quilt

Note: port is the MacPorts package management command. For further information, see Build FieldWorks for Mac.

Check out sources

You'll need clones of a number of git repositories. The recommended directory layout is to have a single parent directory called mono-sil with the clones as subdirectories:

  • mono-sil
    • gtk-sharp
    • libgdiplus
    • mono
    • mono-basic
    • mono-calgary

The directory and clones can be created using the following commands:

mkdir mono-sil
cd mono-sil
for R in gtk-sharp libgdiplus mono mono-basic mono-calgary; do
    git clone git@github:sillsdev/$R.git

The mono repository is fairly large, so this will take a while, especially on slower internet connections.

Build and install

Building mono is done with the script in mono-calgary. Ensure you are in the mono-sil directory, and then run:


This uses the sudo command internally (to gain permission to install to /opt/mono-sil) and so will ask for your password at various points.

If there are build problems it may help to "clean" the mono subdirectory:

(cd mono && git clean -dxf)

Note that the Linux binfmt system that allows you to execute interpreted programs without specifying the interpreter on the command line (eg by typing just application.exe) will still use /usr/bin/mono unless you reconfigure it.


Updating is done by pulling the latest changes in each repo and rebuilding. From the mono-sil directory:

for R in gtk-sharp libgdiplus mono mono-basic mono-calgary; do
    (cd $R && git pull)