summaryrefslogtreecommitdiff
blob: 490b8e680137b21edd47dd94e987b5e37915e15d (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-lisp/cmucl/cmucl-19c.ebuild,v 1.10 2010/12/17 20:17:43 ulm Exp $

EAPI=1

inherit common-lisp-common-2 eutils toolchain-funcs

DEB_PV=1
MY_PV=${PV}-release-20051115

DESCRIPTION="CMU Common Lisp is an implementation of ANSI Common Lisp"
HOMEPAGE="http://www.cons.org/cmucl/
	http://packages.debian.org/unstable/devel/cmucl.html"
SRC_URI="mirror://gentoo/cmucl_${MY_PV}.orig.tar.gz
	mirror://gentoo/cmucl_${MY_PV}-${DEB_PV}.diff.gz
	mirror://gentoo/${P}-x86-linux.tar.bz2"

LICENSE="public-domain"
SLOT="0"
KEYWORDS="x86"
IUSE="doc nosource"

DEPEND=">=dev-lisp/common-lisp-controller-4
	doc? ( virtual/latex-base )
	>=x11-libs/openmotif-2.3:0
	sys-devel/bc"

S=${WORKDIR}/cmucl-${MY_PV}.orig

src_unpack() {
	unpack ${A}
	epatch cmucl_${MY_PV}-${DEB_PV}.diff
	epatch "${FILESDIR}/${PV}/herald-save.lisp-gentoo.patch"

	find "${S}" -type f \( -name \*.sh -o -name linux-nm \) \
		-exec chmod +x '{}' \;
}

src_compile() {
	export SANDBOX_ON=0

	sed -i -e "s,CC = .*,CC = $(tc-getCC),g" \
		src/lisp/Config.linux_gencgc

	PATH=${WORKDIR}/bin:$PATH CMUCLCORE=${WORKDIR}/lib/cmucl/lib/lisp.core make || die

	if use doc; then
		make -C src/docs
	fi
}

src_install() {
	insinto /usr/lib/cmucl/include
	doins src/lisp/*.h target/lisp/*.h target/lisp/*.map target/lisp/*.nm
	insinto /usr/lib/cmucl
	cp target/lisp/lisp.core lisp-dist.core
	doins lisp-dist.core

	dodoc target/lisp/lisp.{nm,map}
	doman src/general-info/{cmucl,lisp}.1

	dobin target/lisp/lisp
	dobin own-work/Demos/lisp-start

	insinto /usr/lib/cmucl
	doins own-work/install-clc.lisp
	exeinto /usr/lib/common-lisp/bin
	newexe own-work/cmucl-script.sh cmucl.sh

	insinto /etc/common-lisp/cmucl
	sed "s,@PF@,${PF},g" <"${FILESDIR}/${PV}/site-init.lisp.in" >site-init.lisp
	doins site-init.lisp
	dosym /etc/common-lisp/cmucl/site-init.lisp /usr/lib/cmucl/site-init.lisp

	dodir /etc/env.d
	cat >"${D}"/etc/env.d/50cmucl <<EOF
# CMUCLLIB=/usr/lib/cmucl
EOF
	[ -f /etc/lisp-config.lisp ] || touch "${D}"/etc/lisp-config.lisp

	insinto /usr/share/doc/${P}/html/Basic-tutorial
	doins own-work/tutorials/Basic-tutorial/*
	insinto /usr/share/doc/${P}/html/Clos
	doins own-work/tutorials/Clos/*
	docinto notes
	dodoc own-work/tutorials/notes/*

	insinto /usr/lib/cmucl
	doins own-work/hemlock11.*

	if use doc; then
		dodoc src/docs/*/*.{ps,pdf}
	fi

	exeinto /usr/lib/cmucl
	doexe target/motif/server/motifd

	# subsystems
	insinto /usr/lib/cmucl/subsystems/
	doins target/interface/clm-library.x86f \
		target/pcl/simple-streams-library.x86f \
		target/pcl/iodefs-library.x86f \
		target/pcl/gray-compat-library.x86f \
		target/hemlock/hemlock-library.x86f \
		target/pcl/gray-streams-library.x86f \
		target/clx/clx-library.x86f

	# Previously installed from dev-lisp/cmucl-source
	if ! use nosource; then
		dodir /usr/share/common-lisp/source/cmucl
		(cd src ; find . -name \*.lisp -and -type f | tar --create --file=- --files-from=- ) |\
			tar --extract --file=- -C "${D}"/usr/share/common-lisp/source/cmucl
		dodir /usr/share/common-lisp/systems
	fi

	# cmucl-graystream
	insinto /usr/share/common-lisp/source/cmucl-graystream
	doins src/pcl/gray-streams* own-work/cmucl-graystream.asd
	dosym /usr/share/common-lisp/source/cmucl-graystream/cmucl-graystream.asd \
		/usr/share/common-lisp/systems/

	# cmucl-clx
	insinto /usr/share/common-lisp/source/cmucl-clx
	cp -r src/clx/*.lisp own-work/cmucl-clx.asd \
		src/code/clx-ext.lisp \
		src/hemlock/charmacs.lisp \
		src/hemlock/key-event.lisp \
		src/hemlock/keysym-defs.lisp \
		"${D}"/usr/share/common-lisp/source/cmucl-clx
	insinto /usr/share/common-lisp/source/cmucl-clx/debug
	doins src/clx/debug/*.lisp
	insinto /usr/share/common-lisp/source/cmucl-clx/demo
	doins src/clx/demo/*.lisp
	insinto /usr/share/common-lisp/source/cmucl-clx/test
	doins src/clx/test/*.lisp
#	find ${D}/usr/share/common-lisp/source/cmucl-clx -type f -print0 | xargs -0 chmod 644
#	find ${D}/usr/share/common-lisp/source/cmucl-clx -type d -print0 | xargs -0 chmod 755
	dosym /usr/share/common-lisp/source/cmucl-clx/cmucl-clx.asd \
		/usr/share/common-lisp/systems/

	keepdir /usr/lib/common-lisp/cmucl
	impl-save-timestamp-hack cmucl || die
}

pkg_postinst() {
	standard-impl-postinst cmucl
	register-common-lisp-source cmucl-graystream
	register-common-lisp-source cmucl-clx
}

pkg_prerm() {
	standard-impl-postrm cmucl /usr/bin/lisp
	unregister-common-lisp-source cmucl-graystream
	unregister-common-lisp-source cmucl-clx
}

pkg_postrm() {
	if [ ! -x /usr/bin/lisp ]; then
		rm -rf /usr/lib/cmucl/ || die
	fi
}