summaryrefslogtreecommitdiff
blob: c3ae9550936e50284bb25a751d46f4a90aad94a4 (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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-fs/coda/coda-6.9.5.ebuild,v 1.1 2010/05/10 22:07:06 george Exp $

inherit autotools eutils toolchain-funcs

IUSE="client server coda_layout coda_symlinks kerberos"
# client        : causes the coda client (venus) to be built.
# server        : causes the coda server (vice) to be built.
# coda_layout   : doesn't apply FHS compliancy patches. Use this if using any directory
#     other than /coda for the mount point makes you upset.
# coda_symlinks : create legacy symlinks if FHS layout is used.

DESCRIPTION="Coda is an advanced networked filesystem developed at Carnegie Mellon Univ."
HOMEPAGE="http://www.coda.cs.cmu.edu/"
SRC_URI="http://www.coda.cs.cmu.edu/pub/coda/src/${P}.tar.gz"

SLOT="0"
LICENSE="GPL-2"
KEYWORDS="~amd64 ~ppc ~x86"

# partly based on the deps suggested by Mandrake's RPM, and/or on my current versions
# Also, definely needs coda.h from linux-headers.
RDEPEND=">=sys-libs/lwp-2.1
	>=net-libs/rpc2-2.6
	>=sys-libs/rvm-1.15
	>=sys-libs/db-3
	>=sys-libs/ncurses-4
	>=sys-libs/readline-3
	>=dev-lang/perl-5.8
	kerberos? ( virtual/krb5 )"

DEPEND="${RDEPEND}
	sys-apps/gawk
	sys-devel/bison
	sys-apps/grep
	virtual/os-headers"

pkg_setup() {
	echo
	einfo "gcc-version = $(gcc-version)"
	echo

	if ! use client && ! use server; then
		eerror "Neither client nor server is enabled."
		eerror "Please enable at least one of these flags!"
		die "at  least one of client or server flags should be on!"
	fi

	if use coda_layout; then
		einfo
		ewarn "You selected coda (legacy) layout."
		ewarn "Please note, that coda itself have transitioned to more FHS"
		ewarn "compilant layout starting with version 6.9.5. Although not all"
		ewarn "internal paths seem to have been updated."
		ewarn "Use with care!"
		einfo
		ewarn "In case you are updating existing installation it is"
		ewarn "recommended to keep old layout in conf files or perform a clean"
		ewarn "transition - copying data externally to fresh version."
		einfo
		sleep 5
	fi
}

src_unpack() {
	unpack ${A}

	cd "${S}"
	tar xjpf "${FILESDIR}"/scripts.tar.bz2
	epatch "${FILESDIR}"/fixdeps.patch
	epatch "${FILESDIR}"/vice-setup.in.patch

	if ! use coda_layout; then
		einfo "seding sources.."
		# First, some common substitutions.
		# As this is a rather critical subsystem and screwing paths can break
		# user's data, protect all seds by die.
		#
		# NOTE: gentoo  specific init scripts installed as a part of unpack ${A}
		# have some paths specified inside. However these will be autoupdated by
		# below seds for free, no need for special care.
		#
		# first, special cases under /usr/coda
		# for spool, look only in subdirs, as we do not want to touch ChangeLog
		grep -rl "/usr/coda/spool" "${S}"/*/* | xargs \
			sed -i -e "s:/usr/coda/spool:/var/spool/coda:" \
			|| die "setting FHS compliant paths failed"

		# coda/etc used to contain vstab file, which normally would reside in
		# /etc/coda. However this file was deprecated, so no special handling..
		# do only subdirs here too.
		grep -rl "/usr/coda/etc" "${S}"/*/*   | xargs \
			sed -i -e "s:/usr/coda/etc:/var/log/coda:" \
			|| die "setting FHS compliant paths failed"

		# stuff uder venus.cache need special care
		# "real cache" goues under /var/cache and pid related files under
		# /var/run
		grep -rl "cachedir=/usr/coda/venus.cache" "${S}"/* | xargs \
			sed -i -e "s:cachedir=/usr/coda/venus.cache:cachedir=/var/cache/coda:" \
			|| die "setting FHS compliant paths failed"
		sed -i -e "s:DFLT_CD \"/usr/coda/venus.cache\":DFLT_CD \"/var/cache/coda\":" \
			"${S}"/coda-src/venus/venus.private.h || die "seding venus.private.h failed"
		grep -rl "/usr/coda/venus.cache" "${S}"/* | xargs \
			sed -i -e "s:/usr/coda/venus.cache:/var/run/coda:" \
			|| die "setting FHS compliant paths failed"

		# what's left in /usr/coda goes to /var/lib/coda
		# NOTE: dumplits.5 man page seems unduly touched by this sed, ignoring
		# for now..
		grep -rl "/usr/coda" "${S}"/*/*   | xargs \
			sed -i -e "s:/usr/coda:/var/lib/coda:" \
			|| die "setting FHS compliant paths failed"

		# move /coda to /mnt/coda
		grep -rle "[[:space:]\"=]/coda" "${S}"/*/*   | xargs \
			sed -i -e "s:\([[:space:]\"=]\)/coda:\1/mnt/coda:" \
			|| die "setting FHS compliant paths failed"

		# move /vice and /vicepX under /var/lib/coda/
		grep -rle "[[:space:]\"=\[]/vice" "${S}"/*/*   | xargs \
			sed -i -e "s:\([[:space:]\"=\[]\)/vice:\1/var/lib/coda/vice:g" \
			|| die "setting FHS compliant paths failed"
	fi

	eautoreconf
}

my_build_venus_prereqs() {
	# Coda uses a recursive make with some directories depending
	# on objects built in other directories, so run make inside
	# the prerequisite dirs first. This builds everything required
	# by venus in the order listed in coda-src/Makefile.am.

	cd "${S}/lib-src"
	emake || die "emake failed"

	# auth2 depends on kerndep
	cd "${S}/coda-src/kerndep"
	emake || die "emake failed"

	# auth2 depends on util.
	cd "${S}/coda-src/util"
	emake || die "emake failed"

	# librepair depends on vicedep
	cd "${S}/coda-src/vicedep"
	emake || die "emake failed"

	# venus depends on dir
	cd "${S}/coda-src/dir"
	emake || die "emake failed"

	# venus depends on al
	cd "${S}/coda-src/al"
	emake || die "emake failed"

	# librepair depends on auth2
	cd "${S}/coda-src/auth2"
	emake || die "emake failed"

	# venus depends on vv
	cd "${S}/coda-src/vv"
	emake || die "emake failed"

	# venus depends on lka
	cd "${S}/coda-src/lka"
	emake || die "emake failed"

	# venus depends on vol
	cd "${S}/coda-src/vol"
	emake || die "emake failed"

	# venus depends on librepair
	cd "${S}/coda-src/librepair"
	emake || die "emake failed"
}

src_compile() {
	local myflags=""

	# Coda uses type punning in a way that violates assumptions made by -O2
	# and friends (via -fstrict-aliasing). Disable this optimization where
	# required.
	local my_safe_cflags="${CFLAGS} -fno-strict-aliasing"
	local my_safe_cxxflags="${CXXFLAGS} -fno-strict-aliasing"

	# Include the server/client code.
	use client && myflags="${myflags} --enable-client"
	use server && myflags="${myflags} --enable-server"

	# Enable kerboeros?
	if use kerberos; then
		myflags="${myflags} --with-crypto --with-krb5"
		myflags="${myflags} --with-krb5-includes=/usr/include/krb5"
		myflags="${myflags} --with-krb5-libs=/usr/lib"
	fi

	# Perform the actual configure.
	econf ${myflags} || die "configure failed"

	# Build any prerequisites for venus.
	my_build_venus_prereqs

	# Venus uses unsafe type punning, so disable
	# some optimizations for venus.
	pushd coda-src/venus
	emake \
		CFLAGS="${my_safe_cflags}" \
		CXXFLAGS="${my_safe_cxxflags}" \
		|| die "emake failed"
	popd

	# Now run make in the source directory to finish the compile.
	emake -j1 || die "emake failed"
}

src_install () {
	emake DESTDIR="${D}" install

	dodoc INSTALL* README* NEWS ChangeLog AUTHORS

	use server && doinitd coda-src/scripts/codasrv
	use client && doinitd coda-src/scripts/venus

	# Fix conflict with backup.sh from tar
	mv -f "${D}"/usr/sbin/backup{,-coda}.sh

	if use coda_layout; then
		# Create coda specific layout
		dodir /usr/coda
		dodir /usr/coda/etc
		dodir /usr/coda/spool
		if use server; then
			dodir /vice
			dodir /vicepa
		fi
		if use client; then
			dodir /coda
			diropts -m0700
			dodir /usr/coda/venus.cache
		fi
	else
		# Create FHS compliant layout
		dodir /var/lib/coda
		dodir /var/log/coda
		dodir /var/spool/coda

		if use server; then
			dodir /var/lib/coda/vice
			dodir /var/lib/coda/vicepa
		fi

		if use client; then
			dodir /mnt/coda
			dosym mnt/coda /coda
			diropts -m0700
			dodir /var/cache/coda
		fi

		if use coda_symlinks; then
			# Symlink traditional coda dirs to gentoo dirs.
			# NOTE: /coda symlink is unconditional for compatibility of client apps
			dosym ../var/lib/coda /usr/coda
			if use server; then
				dosym var/lib/coda/vice /vice
				dosym var/lib/coda/vicepa /vicepa
			fi
		fi
	fi
}

pkg_preinst () {
	enewgroup codaroot
	enewuser codaroot -1 -1 -1 codaroot
}

pkg_postinst () {
	einfo
	elog "To enable the coda server at boot up, please do:"
	elog "    rc-update add codasrv default"
	elog
	elog "To enable the coda client at boot up, do:"
	elog "    rc-update add venus default"
	elog
	elog "To get started, run vice-setup and/or venus-setup."
	einfo
}