Building Mono on Windows
Pages: 1, 2
3. Completing the Build
The last phase of the build process will require you to obtain a copy of the Mono source code. The recommended way to accomplish this is by using anonymous Subversion checkout. The Mono project uses Subversion as its source code management tool. In order to use Subversion, you first need to have a Subversion client installed on your machine. Finally, once you have Subversion installed, and you have checked out and exported the Mono source code, then you can complete the build steps.
3.1 Installing Subversion
If you already have the Subversion, then you can skip this section. You will need to obtain the the Windows installer with the basic Subversion Win32 binaries. You can obtain the installer from the Tigris.org documents and files area.
- Run the setup routine from the the directory chosen during the setup download.
- Click the Yes button to proceed with the installation.
- Click the Next button to begin the installation.
- Select "I accept the agreement" and click the Next button.
- Click the Next button again, and the installation wizard will request the Subversion install location.
- Accept the default, C:\Program Files\Subversion, by clicking the Next button. The installation wizard will then request the start menu folder.
- Accept the default, Subversion, and click the Next button. The installation wizard will then request whether you want to install desktop and Quick Launch icons.
- Make your desired selections for shortcut icons and click Next to finalize the installation wizard selections.
- Finally, on the "Ready to Install" screen, click the Install button to begin the installation. You will receive an information screen after the installation is complete.
- Click Next and then Finish to complete the installation. The installation wizard should ask if you want to restart your system. Click Yes to restart your system.
When your system restarts, you should verify that the Tortoise Subversion Windows Explorer plugin was successfully installed. From within Explorer, right-click on any directory. You should see a new menu item: TortoiseSVN. Click on this entry and you should see another menu list. Select the About menu option. You should receive the TortoiseSVN 1.1.1, Build 1857 about dialog box.
3.2 Check Out the Mono Source Code
In order to build Mono, you will need to
check out three source subtrees:
libgdiplus. To anonymously check out
the Mono source code:
- First, create a directory as a sandbox to check out the source code files. I suggest C:\monosvn\mono\x.x, where x.x should represent the version of the source code.
- From within Windows Explorer, locate the sandbox directory you created in the previous step and right-click on the directory.
- You should have two TortoiseSVN menu options. Select the Checkout option.
- The Subversion Checkout dialog will appear. In order to access the Mono Project source code, you need to point the Subversion client to the Mono Project Subversion repository. In the URL for repository enter "svn://svn.myrealbox.com/source/trunk/mono".
- Ensure that
your sandbox directory is identified in the checkout directory, and
Note: When the checkout is complete, the subtree will appear in the sandbox directory in explorer. The directory icon will appear with a little check in the lower left-hand corner. This illustrates that the directory was checked out from Subversion.
- You need to export the directory into your Cygwin directory structure. Right-click on the c:\monosvn\mono\1.2 directory. On the context menu, select TortoiseSVN and then export. Subversion will provide the Browse For Folder dialog window.
- Select C:\cygwin\download\mono-1.1.4 and then click Ok. This will copy the files from the sandbox to the build directory.
the checkout and export steps for the
libgdiplussubtrees. In the checkout step, substitute the subtree at the end of the repository URL, for example: "svn://svn.myrealbox.com/source/trunk/mcs".
3.3 Build Setup
You are now almost ready to begin the build process. You first need to take care of few preparatory steps and then you'll be ready for the build. These fews steps will redirect the calls for the C# compiler to the Mono C# compiler, allowing you to build Mono with Mono. To finish our preparations, complete the following:
- From within
the Cygwin environment, type
mkdir -p /opt/monoand press
- You now need
to mount, within the Cygwin environment, the root directory you used for
the Mono combined installation. Enter
mount -s c:/mono/Mono-1.1.3 /usr/localand press
- Next, you need
to create two symbolic links. First type
ln -s /usr/local/bin/mcs ./csc.exeand press
Enter. This will substitute the Mono C# compiler for the C# compiler. You can test this by typing
csc.exe --version. You should receive the result shown in Figure 4.
Figure 4. Checking the CSC version
- Next you need to type
ln -s /usr/local/bin/monoresgen.exe ./resgen.exeand press
Enter. This will substitute the Mono Resource File Generator for the .NET Framework Resource File Generator. Confirm this by typing
resgen.exe. You should receive the result shown in Figure 5.
Figure 5. Generating the resources
3.4 Building Mono With Mono
you are ready to build Mono with
Mono. From the mono subdirectory, you will complete the three-step
build process involving
make install. To finish the
- From within the Cygwin environment, type
cd /download/mono-1.1.4/monoand press
Enter. This will put you in the Mono directory of the source code.
./autogen.sh --prefix=/opt/mono --with-preview=yesand press
autogenencounters any problems with the environment or in terms of dependencies, it will stop. If the process does not halt, you should receive a long stream of console comments; at the end, however, it should resemble Figure 6.
makecommand will take a few minutes, so please be patient. Also, just as with the
makecommand will produce a long stream of console comments. What you should be alert for is any type of error message that appears immediately before the
makecommand completes. The output should look like Figure 7.
Figure 7. Making Mono
make installand press
Enter. Once again, this will take a few minutes. A successful
make installshould look like Figure 8.
4. Post-Build Instructions
Now that you have successfully built Mono, you now have a directory structure in /opt/mono that is similar to the one that the Mono Combined installer creates for Win32. Keep in mind that the resulting output does not include GTK+, Gtk#, MonoDoc, or XSP. Also missing are prerequisites that almost never change and that originate from other parties like Microsoft (as in the case for msvcr71.dll, found in C:\mono\Mono-1.1.3\bin). However, you now have the essence of the latest Mono release. Your options at this point include repackaging all of the framework and its supporting components or just using a particular library or executable that you know was just fixed in SVN.
To verify the results of the build process,
change to the prefix directory, /opt/mono, and study its
contents and structure. There are two significant kinds of files
created in the directory hierarchy. There are binary files like
/opt/mono/lib/mono/1.0/mcs.exe and /opt/mono/lib/mono/1.0/System.Xml.dll.
These are examples of managed
assemblies. Other resulting binary files include unmanaged
executables and static libraries such as
The build process also creates many
configuration and/or supporting files that might contain file
information that is specific to the choices made when autogen.sh was
run for the first time (remember
--with-preview=yes? Refer to 3.4, "Building Mono With Mono").
Examples of these files are /opt/mono/lib/pkgconfig/mono.pc and
/opt/mono/bin/ilasm. These are generic text files, so you can
their contents with any ASCII-friendly text editor. Changing these
files is a critical function of the Windows Combined Installer, as you
will now see.
In theory, you could take all of the child
directories that are found in /opt/mono and simply copy and paste
them over to C:\mono\Mono-1.1.3. Unfortunately, the text
that I mentioned above contain an unusable path reference to /opt/mono.
The Windows operating system would not be able to resolve this path, and
your Mono installation would not work. Remember, that path is only
viable in the Cygwin environment, which is not required to run the
resulting Mono in Win32. You would also be missing some batch
files that parallel the shell scripts. The batch files are
ones that actually invoke the execution of the Mono runtime
(C:\mono\Mono-1.1.3\bin\mono.bat) and indispensable tools like
(C:\mono\Mono-1.1.3\bin\gacutil.bat) while in Windows. In fact, if you
were to look at the Inno
Setup installer script that was
mono-1.1.3-gtksharp-1.9.1-win32-0.4.exe, you will notice that
the largest portion of the script goes to
searching and replacing a constant,
C:\Target, by the path that the
user selects during the installation routine.
5. Call to Action
Today, building and deploying Mono on the Win32 platform without the Win32 Mono Combined installer requires extensive manual intervention. This must change. The Linux Mono community enjoys great autonomy with the Linux build process. As I have described, it is clear that the Windows Mono community does not share that same autonomy. I understand that this is partially because Mono originates from a Linux-friendly environment. However, I'm sure that the same spirit of innovation and ingenuity that has distinguished the Mono project thus far, can also help resolve this disparity. Therefore, I urge the Mono community and especially the core Mono team to provide the necessary guidance, resources, and focus to help automate the Windows build and deployment process. I'm sure that if we accomplish this goal, we will unleash significant pent-up demand for the Mono project from the Windows C# community. And if there's anything I've learned about open source software, is that it is all about the community, and the bigger the community the better.
As has been the case for me so many times before, this effort would not be possible without the determination and drive of my good friend Francisco (Paco) Martinez. Through countless hours and cups of coffee, he perfected this process and then made it seem simple as we went through it step by step. Eric Raymond once said that you're not a hacker until someone calls you one, so I'm here to say: "Paco is a hacker extraordinaire." With the continued support of O'Reilly Network, we look forward to sharing many other articles focusing on Mono for Windows geeks.
Kevin Shockey is an emerging high technology entrepreneur.
Return to ONDotnet.com.
Showing messages 1 through 6 of 6.
2005-02-08 05:24:07 simon_massey [View]
2005-02-08 06:18:19 simon_massey [View]
2005-02-08 05:32:32 simon_massey [View]
2005-02-08 04:16:52 Paco_ [View]