summaryrefslogtreecommitdiff
blob: 6b110c128e26c2d5624b5b4b16ed95d49a927b83 (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
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=4

inherit autotools toolchain-funcs

RESTRICT="test"

DESCRIPTION="OpenDylan language runtime environment"

HOMEPAGE="http://opendylan.org"
SRC_URI="http://opendylan.org/downloads/${PN}/${PV}/${P}-sources.tar.bz2"

LICENSE="Opendylan"
SLOT="0"

# not tested on x86
KEYWORDS="~amd64 ~x86"

IUSE=""

# the boehm-gc check is "wrong" and reported upstream
# but for now static-libs useflag is needed
DEPEND="app-arch/unzip
	dev-libs/boehm-gc[threads]
	dev-lang/perl
	dev-perl/XML-Parser
	|| ( dev-lang/opendylan-bin dev-lang/opendylan )
	x86? ( <dev-libs/mps-1.108 )"
RDEPEND="${DEPEND}"

# on x86 there's a dependency on mps, but the build system is a bit ... hmm ...
# let's give it more of a chance to survive then
NAUGHTY_FILES=(
	sources/lib/run-time/collector.c.malloc
	sources/lib/run-time/collector.c
	sources/lib/run-time/pentium-win32/buffalo-collector.c
	sources/lib/run-time/pentium-win32/heap-stats.c
	sources/lib/run-time/heap-utils.h
	)

NAUGHTY_HEADERS=(
	mps.h
	mpscmv.h
	mpscamc.h
	mpsavm.h
	)

S="${WORKDIR}/${PN}"

src_prepare() {
	# configure autodetects clang and prefers it, #527108
	sed -i -e 's/clang//' configure.ac || die
	mkdir -p build-aux
	elibtoolize && eaclocal || die "Fail"
	automake --foreign --add-missing # this one dies wrongfully
	eautoconf || die "Fail"
	# mps headers, included wrong
	if use x86; then
	for i in ${NAUGHTY_FILES[@]}; do
		for header in ${NAUGHTY_HEADERS[@]}; do
			sed -i -e "s:\"${header}\":<${header}>:" $i
		done
	done
	fi
}

src_configure() {
	if has_version =dev-lang/opendylan-bin-2013.2; then
		PATH=/opt/opendylan-2013.2/bin/:$PATH
	elif has_version =dev-lang/opendylan-bin-2013.1; then
		PATH=/opt/opendylan-2013.1/bin/:$PATH
	elif has_version =dev-lang/opendylan-bin-2012.1; then
		PATH=/opt/opendylan-2012.1/bin/:$PATH
	elif has_version =dev-lang/opendylan-bin-2011.1; then
		PATH=/opt/opendylan-2011.1/bin/:$PATH
	else
		PATH=/opt/opendylan/bin:$PATH
	fi

	if use amd64; then
		econf --prefix=/opt/opendylan || die
	else
		econf --prefix=/opt/opendylan --with-mps=/usr/include/mps/ || die
	fi
	if use x86; then
	# Includedir, pointing at something wrong
	sed -i -e 's:-I$(MPS)/code:-I$(MPS):'  sources/lib/run-time/pentium-linux/Makefile || die "Couldn't fix mps path"
	sed -i -e 's~(cd $(MPS)/code; make -f lii4gc.gmk mmdw.a)~:;~' sources/lib/run-time/pentium-linux/Makefile || die "Couldn't fix mps building"
	sed -i -e 's~(cd $(MPS)/code; make -f lii4gc.gmk mpsplan.a)~:;~' sources/lib/run-time/pentium-linux/Makefile || die "Couldn't fix mps building"
	sed -i -e 's~$(MPS_LIB)/mpsplan.a~/usr/lib/mpsplan.a~' sources/lib/run-time/pentium-linux/Makefile || die "Couldn't fix mps clone"
	sed -i -e 's~$(MPS_LIB)/mmdw.a~/usr/lib/mmdw.a~' sources/lib/run-time/pentium-linux/Makefile || die "Couldn't fix mps clone"
	fi
}

src_compile() {
	ulimit -s 32000 # this is naughty build system
	emake -j1 3-stage-bootstrap || die
}

src_install() {
	ulimit -s 32000 # this is naughty build system
	# because of Makefile weirdness it rebuilds quite a bit here
	# upstream has been notified
	emake -j1 DESTDIR="${D}" install
	mkdir -p "${D}/etc/env.d/opendylan/"
	echo "export PATH=/opt/opendylan/bin:\$PATH" > "${D}/etc/env.d/opendylan/99-opendylan" || die "Failed to add env settings"
}