IKVM is a complex application, built from three different components - 
GNU Classpath, OpenJDK, and IKVM itself. Unfortunately, it is not 
possible to use the Debian packages for OpenJDK and Classpath as a base 
(not only are there files unavailable in them, but IKVM requires *exact* 
slightly modified snapshot versions).

As such, we decided within the Mono packaging teams that the simplest 
way to deal with the need, rather than a 40+ megabyte diff.gz, would be 
to construct a new orig.tar.gz from the three constituent components.

The get-orig-source rule in debian/rules should download the latest IKVM 
release, then use the URLs contained inside it to download the matching 
Classpath and OpenJDK. All three parts are mixed together a little, to 
remove DFSG-related issues such as stray .class, .so, .dll, and .exe 
files.

Unfortunately, IKVM requires IKVM to build (yay!). We've managed to pull 
the number of bootstrapping binaries down to three machine-generated 
files (.class stubs generated from Mono .dll files using ikvmstub). To 
ensure a completely "clean" build, this package is therfore compiled in 
two passes - the first pass is used to regenerate these bootstrap 
binaries with "known-good" versions based on the currently installed 
Mono framework, and the second pass uses these new files to compile a 
"final" version of IKVM.

It's all unquestionably messy, but when even upstream is warning you 
that building from source should be considered nigh on impossible, we're 
proud that we've produced a Lintian-clean package.

Enjoy.

--Jo Shields <directhex@apebox.org>, 2008-01-06
