diff --git a/extra/mono/PKGBUILD b/extra/mono/PKGBUILD new file mode 100644 index 000000000..db8394787 --- /dev/null +++ b/extra/mono/PKGBUILD @@ -0,0 +1,69 @@ +# $Id: PKGBUILD 140778 2011-10-19 07:11:57Z daniel $ +# Maintainer: Daniel Isenmann +# Contributor: Brice Carpentier + +# ALARM: Kevin Mihelich +# - Added alarm.patch for armv7h to fix detection of VFP capability +# and using autogen.sh to rebuild for configure.in changes. +# - Remove noautobuild on next version bump. + +plugrel=1 +noautobuild=1 + +pkgname=mono +pkgver=2.10.6 +pkgrel=1 +pkgdesc="Free implementation of the .NET platform including runtime and compiler" +arch=(i686 x86_64) +license=('GPL' 'LGPL2' 'MPL' 'custom:MITX11') +url="http://www.mono-project.com/" +depends=('zlib' 'libgdiplus>=2.10' 'sh') +makedepends=('pkgconfig') +options=('!libtool' '!makeflags') +provides=('monodoc') +conflicts=('monodoc') +source=(http://download.mono-project.com/sources/${pkgname}/${pkgname}-${pkgver}.tar.bz2 + mono.rc.d + alarm.patch) +md5sums=('c442cef4cd6668b0a1391a661f6815a9' + '8315e46c6a6e9625502521fc0ad1a322' + 'db43f2824188e4d1583b676f2e62db24') + +build() { + cd ${srcdir}/${pkgname}-${pkgver} + # build mono + if [ "$CARCH" = "armv7h" ]; then + patch -Np1 -i ${srcdir}/alarm.patch + ./autogen.sh --prefix=/usr --sysconfdir=/etc \ + --with-libgdiplus=installed --with-fpu=VFP + else + ./configure --prefix=/usr --sysconfdir=/etc \ + --with-libgdiplus=installed + fi + make || return 1 + + # build jay + cd ${srcdir}/${pkgname}-${pkgver}/mcs/jay + make || return 1 +} + +package() { + cd ${srcdir}/${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install || return 1 + + # install jay + cd ${srcdir}/${pkgname}-${pkgver}/mcs/jay + make DESTDIR=${pkgdir} prefix=/usr INSTALL=../../install-sh install + cd ${srcdir}/${pkgname}-${pkgver} + + # install daemons and pathes + mkdir -p ${pkgdir}/etc/rc.d + install -m755 ${srcdir}/mono.rc.d ${pkgdir}/etc/rc.d/mono + + #install license + mkdir -p ${pkgdir}/usr/share/licenses/${pkgname} + install -m644 mcs/MIT.X11 ${pkgdir}/usr/share/licenses/${pkgname}/ + + #fix .pc file to be able to request mono on what it depends, fixes #go-oo build + sed -i -e "s:#Requires:Requires:" ${pkgdir}/usr/lib/pkgconfig/mono.pc +} diff --git a/extra/mono/alarm.patch b/extra/mono/alarm.patch new file mode 100644 index 000000000..0e78c4e56 --- /dev/null +++ b/extra/mono/alarm.patch @@ -0,0 +1,31 @@ +--- a/configure.in 2011-09-13 21:36:18.000000000 -0600 ++++ b/configure.in 2011-10-20 00:25:35.000000000 -0600 +@@ -2651,15 +2651,24 @@ + ]) + fi + +-if test ${TARGET} = ARM && test x$cross_compiling = xno && test x$enable_mcs_build != xno; then ++AC_ARG_WITH(fpu, [ --with-fpu=FPA,VFP,NONE Select fpu to use on arm],[fpu=$withval]) ++ ++if test ${TARGET} = ARM; then + dnl ****************************************** + dnl *** Check to see what FPU is available *** + dnl ****************************************** + AC_MSG_CHECKING(which FPU to use) + +- AC_TRY_COMPILE([], [ +- __asm__ ("ldfd f0, [r0]"); +- ], fpu=FPA, fpu=NONE) ++ if test "x$fpu" = "x"; then ++ ++ AC_TRY_COMPILE([], [ ++ __asm__ ("ldfd f0, [r0]"); ++ ], fpu=FPA, [ ++ AC_TRY_COMPILE([], [ ++ __asm__ ("fldd d0, [r0]"); ++ ], fpu=VFP, fpu=NONE) ++ ]) ++ fi + + AC_MSG_RESULT($fpu) + CPPFLAGS="$CPPFLAGS -DARM_FPU_$fpu=1" diff --git a/extra/mono/bug434892.patch b/extra/mono/bug434892.patch new file mode 100644 index 000000000..d4f46f68c --- /dev/null +++ b/extra/mono/bug434892.patch @@ -0,0 +1,11 @@ +--- trunk/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs 2008/07/01 20:17:46 107006 ++++ trunk/mcs/class/System.Web.Services/System.Web.Services.Description/BasicProfileChecker.cs 2008/10/28 09:32:46 117243 +@@ -177,7 +177,7 @@ + foreach (OperationMessage om in op.Messages) { + Message msg = ctx.Services.GetMessage (om.Message); + foreach (MessagePart part in msg.Parts) +- parts.Add (part,part); ++ parts [part] = part; // do not use Add() - there could be the same MessagePart instance. + } + } + diff --git a/extra/mono/mini_amd64.patch b/extra/mono/mini_amd64.patch new file mode 100644 index 000000000..f8685c337 --- /dev/null +++ b/extra/mono/mini_amd64.patch @@ -0,0 +1,13 @@ +--- mono/mini/mini-amd64.c 2009-03-19 21:08:18 UTC (rev 129824) ++++ mono/mini/mini-amd64.c 2009-03-19 21:09:53 UTC (rev 129825) +@@ -1009,7 +1009,7 @@ + locals_size += mono_type_size (ins->inst_vtype, &ialign); + } + +- if ((cfg->num_varinfo > 10000) || (locals_size >= (1 << 15))) { ++ if ((cfg->num_varinfo > 5000) || (locals_size >= (1 << 15)) || (header->code_size > 110000)) { + /* Avoid hitting the stack_alloc_size < (1 << 16) assertion in emit_epilog () */ + cfg->arch.omit_fp = FALSE; + } + + diff --git a/extra/mono/mono.rc.d b/extra/mono/mono.rc.d new file mode 100644 index 000000000..548cc2d7b --- /dev/null +++ b/extra/mono/mono.rc.d @@ -0,0 +1,35 @@ +#!/bin/bash +. /etc/rc.conf +. /etc/rc.d/functions + +case "$1" in + start) + stat_busy "Registering .NET IL binaries with mono" + if [ ! -d /proc/sys/fs/binfmt_misc ]; then + stat_die "You need support for \"misc binaries\" in your kernel!" + fi + mount | grep -q binfmt_misc + if [ $? != 0 ]; then + mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc + if [ $? != 0 ]; then + stat_die + fi + fi + echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register + stat_done + ;; + stop) + + stat_busy "Unregistering .NET IL binaries" + if [ -f /proc/sys/fs/binfmt_misc/CLR ]; then + echo '-1' > /proc/sys/fs/binfmt_misc/CLR + fi + stat_done + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac