Zor's Blog
Seeing Sharp

F# and XBuild (Debian)

Since some folks from ##fsharp on irc.freenode.net requsted it, I’m going to put up the stuff I actually remember about getting F# projects on Linux/Mono to compile under XBuild. This guide assumes that you have successfully built and installed the F# tooling from source.

Most of the stuff that needs to be done is hacking. A sane setup shouldn’t need the amount of hackery I’ve done to get this to work.

Also, I’d like to thank shana and mhutch @ irc.gnome.org for their help with getting this done. As far as I know, shana is also working on getting some better Debian packaging put together (so that the package on CodePlex isn’t totally broken).

The first hack we’re going to do is creating the directory where XBuild expects to find Microsoft.FSharp.targets. If your Mono installation is prefixed to /usr/local, this will be /usr/local/lib/mono/Microsoft F#/v4.0. So go ahead and create that.

Now we’re going to throw in the actual MSBuild file. We just grab it off the source repository, here:

https://github.com/fsharp/fsharp/raw/master/lib/bootstrap/4.0/Microsoft.FSharp.targets

With this file in place (in /usr/local/lib/mono/Microsoft F#/v4.0), XBuild will now have something usable for building F# projects.

You might get an error regarding _ComputeNonExistentFileProperty when trying to build a project. If so, simply locate it in /usr/local/lib/mono/4.0/Microsoft.Common.targets, and uncomment it. It does no harm.

Now, back to hacking: We need to create a series of symbolic links to the F# runtime libraries in /usr/local/lib/mono/Microsoft F#/v4.0. Ideally, this should be fixed in Microsoft.FSharp.targets at some point, but my knowledge about MSBuild is quite limited, so I haven’t dared to do an attempt.

Anyhow, in the aforementioned directory, ensure that you have a layout like so:

FSharp.Build.dll –> /usr/local/lib/mono/4.0/FSharp.Build.dll
FSharp.Core.dll –> /usr/local/lib/mono/4.0/FSharp.Core.dll
FSharp.Core.dll.optdata –> /usr/local/lib/mono/4.0/FSharp.Core.dll.optdata
FSharp.Core.dll.sigdata –> /usr/local/lib/mono/4.0/FSharp.Core.dll.sigdata

This should make XBuild happy. However, I haven’t actually tested this; I’m just recalling from memory – so, feedback is welcome!

Edit: Tim Robinson mentions that the instructions are the same on OS X, except that Mono will be installed in /Library/Frameworks/Mono.framework/Versions/Current instead of /usr/local.

One Response to “F# and XBuild (Debian)”

  1. The instructions for Mac OS X are the same, except that Mono will be installed at /Library/Frameworks/Mono.framework/Versions/Current instead of /usr/local.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.