summaryrefslogtreecommitdiff
blob: bb9472d1f95f9eca65838b035238b5cc73133176 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-lang/mono/mono-1.1.16.1.ebuild,v 1.5 2007/06/26 22:48:49 jurek Exp $

inherit eutils mono flag-o-matic multilib autotools

RESTRICT="confcache"

DESCRIPTION="Mono runtime and class libraries, a C# compiler/interpreter"
HOMEPAGE="http://www.go-mono.com/"
SRC_URI="http://www.go-mono.com/sources/mono-${PV:0:3}/${P}.tar.gz"

LICENSE="|| ( GPL-2 LGPL-2 X11 )"
SLOT="0"
KEYWORDS="~x86 ~ppc ~amd64"
IUSE="nptl X"

DEPEND=">=dev-libs/glib-2.0
	sys-devel/bc
	!<dev-dotnet/pnet-0.6.12
	nptl? ( >=sys-devel/gcc-3.3.5-r1 )
	ppc? (
		>=sys-devel/gcc-3.2.3-r4
		>=sys-libs/glibc-2.3.3_pre20040420
	)"

RDEPEND="${DEPEND}
	X? ( >=dev-dotnet/libgdiplus-1.1.16 )
	dev-util/pkgconfig
	dev-libs/libxml2"

RESTRICT="test"

src_unpack() {
	unpack ${A}
	cd ${S}

	# Fix munging of Unix paths
	epatch ${FILESDIR}/${PN}-1.1.13-pathfix.diff

	# Install all our .dlls under $(libdir), not $(prefix)/lib
	if [ $(get_libdir) != "lib" ] ; then
		sed -i -e 's:$(prefix)/lib:$(libdir):' \
			-e 's:$(exec_prefix)/lib:$(libdir):' \
			-e "s:'mono_libdir=\${exec_prefix}/lib':\"mono_libdir=\$libdir\":" \
			${S}/{scripts,mono/metadata}/Makefile.am \
			${S}/configure.in || die "sed failed"
		sed -i -e 's:^libdir.*:libdir=@libdir@:' \
			-e 's:${prefix}/lib/:${libdir}/:g' \
			${S}/{scripts,}/*.pc.in || die "sed failed"
	fi

	# Remove the dummy ltconfig and leave to libtoolize handling it
	rm -f ${S}/libgc/ltconfig

	eautoreconf
}

src_compile() {
	strip-flags

	local myconf="--with-preview=yes"

	# Force __thread on amd64. See bug #83770
	if use amd64
	then
		myconf="${myconf} --with-tls=__thread"
	else
		if use nptl
		then
			myconf="${myconf} --with-tls=__thread"
		else
			myconf="${myconf} --with-tls=pthread"
		fi
	fi

	# Force the use of the monolite mcs, to prevent us from trying to build
	# with old buggy classlibs/mcs versions. See bug #118062
	touch ${S}/mcs/build/deps/use-monolite
	econf ${myconf} || die

	# Force LC_ALL=C and the use of internal mcs/mono to prevent issues with
	# I18N.dll (bug #146424)
	LC_ALL=C emake -j1 EXTERNAL_MCS=false EXTERNAL_MONO=false

	if [[ "$?" -ne "0" ]]; then
		ewarn "If you are using any hardening features such as"
		ewarn "PIE+SSP/SELinux/grsec/PAX then most probably this is the reason"
		ewarn "why build has failed. In this case turn any active security"
		ewarn "enhancements off and try emerging the package again"
		die
	fi
}

src_install() {
	make DESTDIR=${D} install || die

	dodoc AUTHORS ChangeLog NEWS README
	docinto docs
	dodoc docs/*
	docinto libgc
	dodoc libgc/ChangeLog
}

pkg_postinst() {
	ewarn "This version of mono has changed the assembly version for"
	ewarn "ICSharpCode.SharpZipLib, which may break some installed"
	ewarn "applications such as monodoc. Please re-emerge monodoc and any"
	ewarn "other packages you have which may make use of this library."
}