an attempt at documentation of my ongoing struggles with solaris and opensolaris on x86. I believe strongly in the (public) documentation of trials, struggles and failures, even more so than in the documentation of success: With a long standing commitment to solaris, looking for answers and just finding "I tried it on distibution 'X' and it worked for me" is not very informative.

Wednesday, February 25, 2009

building mono 2.2 from scratch on opensolaris

Ah the sweet taste of succes makes me long for more...

I had another look at hugin and remembered I'd need mono to get hugin (or one of it's dependencies) to work on my opensolaris laptop.

So once more I venture into the trenches and downloaded the mono sources.

I left my symlinks to ac_local and automake from a previous exercise in place, promoted /usr/sfw/bin to be the first in the $PATH, symlinked /usr/sfw/bin/ggrep to /usr/sfw/bin/grep to fix an initial grep error in a first pass of ./configure and:

#./configure passed!
I did see some grep errors, and with assuming that ggrep would fix that, I symlinked grep to grep in /usr/sfw/bin.

# make
crashed and burned with errors complaining about dtrace:

make[3]: Entering directory `/root/mono-2.2/mono/utils'
/usr/sbin/dtrace -32 -s ../../data/mono.d -o mono-dtrace.h
dtrace: script '../../data/mono.d' matched 0 probes
dtrace: no probes matched
make[3]: *** [mono-dtrace.h] Error 1
make[3]: Leaving directory `/root/mono-2.2/mono/utils'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/mono-2.2/mono'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/mono-2.2'
make: *** [all] Error 2

#./configure --enable-dtrace=true
fixed that!

(reading the ./configure --help I realise i should've used --enable-dtrace=yes, so I'm assuming dtrace support isn't enabled...)

I symlinked /usr/sfw/bin/gmake to /usr/sfw/bin/make and

# make
crashed on some u_int32_t errors:

googleing for this I found a solution: replace u_int32_t with uint32_t and try again. Seems most of them were ironed out before, except for three entries in

In file included from ../../mono/utils/freebsd-elf32.h:32,
from aot-compiler.c:67:
../../mono/utils/freebsd-elf_common.h:46: error: syntax error before "u_int32_t"
../../mono/utils/freebsd-elf_common.h:46: warning: no semicolon at end of struct or union
../../mono/utils/freebsd-elf_common.h:47: warning: type defaults to `int' in declaration of `n_descsz'
../../mono/utils/freebsd-elf_common.h:47: warning: data definition has no type or storage class
../../mono/utils/freebsd-elf_common.h:48: error: syntax error before "n_type"
../../mono/utils/freebsd-elf_common.h:48: warning: type defaults to `int' in declaration of `n_type'
../../mono/utils/freebsd-elf_common.h:48: warning: data definition has no type or storage class
../../mono/utils/freebsd-elf_common.h:49: warning: type defaults to `int' in declaration of `Elf_Note'
../../mono/utils/freebsd-elf_common.h:49: warning: data definition has no type or storage class
In file included from aot-compiler.c:67:
../../mono/utils/freebsd-elf32.h:144: error: syntax error before "Elf32_Nhdr"
../../mono/utils/freebsd-elf32.h:144: warning: type defaults to `int' in declaration of `Elf32_Nhdr'
../../mono/utils/freebsd-elf32.h:144: warning: data definition has no type or storage class
In file included from aot-compiler.c:68:
../../mono/utils/freebsd-elf64.h:162: error: syntax error before "Elf64_Nhdr"
../../mono/utils/freebsd-elf64.h:162: warning: type defaults to `int' in declaration of `Elf64_Nhdr'
../../mono/utils/freebsd-elf64.h:162: warning: data definition has no type or storage class
make[4]: *** [aot-compiler.lo] Error 1
make[4]: Leaving directory `/root/mono-2.2/mono/mini'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/root/mono-2.2/mono/mini'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/mono-2.2/mono'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/mono-2.2'
make: *** [all] Error 2

fixed that by changing the u_int32_t's to uint32_t's. and

# make
again.

now:
if test -w ../mcs; then :; else chmod -R +w ../mcs; fi
cd ../mcs && make NO_DIR_CHECK=1 PROFILES='net_1_1 net_2_0 net_3_5 net_2_1' CC='gcc' all-profiles
make[3]: Entering directory `/root/mono-2.2/mcs'
make profile-do--net_1_1--all profile-do--net_2_0--all profile-do--net_3_5--all profile-do--net_2_1--all
make[4]: Entering directory `/root/mono-2.2/mcs'
make PROFILE=basic all
make[5]: Entering directory `/root/mono-2.2/mcs'
usage: mcs [-cdpVz] [-a string] [-n name] file ...
make[6]: *** [build/deps/basic-profile-check.exe] Error 1
make[6]: Entering directory `/root/mono-2.2/mcs'
*** The compiler 'mcs' doesn't appear to be usable.
*** Trying the 'monolite' directory.
make[7]: Entering directory `/root/mono-2.2/mcs'
build/deps/basic-profile-check.cs(1,1): error CS8025: Parsing error
make[8]: *** [build/deps/basic-profile-check.exe] Error 1
make[8]: Entering directory `/root/mono-2.2/mcs'
*** The contents of your 'monolite' directory may be out-of-date

Ouch. What's that! Checking the readme.. it suggests that I'll have to run "make get-monolite-latest" (make sure gtar is found as tar in your $PATH and move solaris' mcs out of the way),
# make EXTERNAL_MCS=false

This works! (Ok, As I've been poking around a lot with getting this to work, I also installed the monolite-latest libs in /usr/local/lib/mono/1.0, so if the above doesn't work... Install em there).

I've also found that when make or ./configure fails, errors are seldomly reproducible even after make clean. I tend to rm -rf the dir and tar xvf again. This holds true for most of the stuff I build anyways.

anyways.

# make check runs fine as well:

339 test(s) passed. 3 test(s) did not pass.

Failed tests:

appdomain-unload.exe
thunks.exe
bug-459094.exe

Well. That does seem ok for now.

No comments: