summaryrefslogtreecommitdiff
blob: 55c5decd07e3429f3ad168663c14f012928e24d3 (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
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-cluster/pvfs2/pvfs2-2.7.1-r1.ebuild,v 1.1 2009/09/27 14:22:21 jsbronder Exp $

inherit linux-mod toolchain-funcs autotools

MY_PN="${PN%[0-9]*}"
MY_P="${MY_PN}-${PV}"
S="${WORKDIR}/${MY_P}"

DESCRIPTION="Parallel Virtual File System version 2"
HOMEPAGE="http://www.pvfs.org/"
SRC_URI="ftp://ftp.parl.clemson.edu/pub/pvfs2/${MY_P}.tar.gz"
IUSE="apidocs doc examples gtk server ssl static"
RDEPEND="gtk? ( >=x11-libs/gtk+-2 )
		ssl? ( dev-libs/openssl )
		sys-libs/db"
DEPEND="${RDEPEND}
		doc? ( dev-tex/latex2html )
		apidocs? ( app-doc/doxygen )
		virtual/linux-sources"
SLOT="0"
LICENSE="GPL-2"
KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"

pkg_setup() {
	linux-mod_pkg_setup

	if kernel_is 2 4; then
		BUILD_TARGETS="just_kmod24"
		ECONF_PARAMS="--with-kernel24=${KV_OUT_DIR}"
		MODULE_NAMES="pvfs2(fs::src/kernel/linux-2.4)"
	else
		BUILD_TARGETS="just_kmod"
		ECONF_PARAMS="--with-kernel=${KV_OUT_DIR} --enable-verbose-build"
		MODULE_NAMES="pvfs2(fs::src/kernel/linux-2.6)"
	fi

	ECONF_PARAMS="${ECONF_PARAMS}
		--enable-mmap-racache
		--sysconfdir=/etc/pvfs2
		--enable-shared
		--enable-static
		$(use_enable static static-server)
		$(use_enable gtk karma)
		$(use_enable server)
		$(use_with ssl openssl /usr/$(get_libdir))"
}

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

	# Upstream doesn't seem to want to apply this which makes
	# sense as it probably only matters to us.  Simple patch
	# to split the installation of the module (which we use
	# the eclass for) and the installation of the kernapps.
	epatch "${FILESDIR}"/${PN}-split-kernapps.patch

	# Support for >=linux-2.6.25, should be unnecessary next release.
	sed -i 's/  Q=@echo >.*/  Q=@/' src/kernel/linux-2.6/Makefile.in
	# upstream patch for 2.6.26 kernels
	epatch "${FILESDIR}"/${PN}-super.c.patch

	# upstream patch for 2.6.29+ MAIN:pcarns:20090401202748, MAIN:pcarns:20090401212735
	epatch "${FILESDIR}"/${P}-2.6.29-fixes.patch

	# upstream patch for 2.6.30+ MAIN:pcarns:20090630184815
	if kernel_is -ge 2 6 30; then
		epatch "${FILESDIR}"/${P}-2.6.30-fixes.patch
	fi

	AT_M4DIR=./maint/config eautoreconf || die
}

src_compile() {
	linux-mod_src_compile || die
	emake kernapps || die
	emake all || die
	if use doc; then
		emake docs || die
		if use apidocs; then
			cd "${S}"/doc
			doxygen doxygen/pvfs2-doxygen.conf || die
		fi
	fi
}

src_install() {
	linux-mod_src_install || die
	emake DESTDIR="${D}" kernapps_install || die
	emake DESTDIR="${D}" install || die

	if use server; then
		newinitd "${FILESDIR}"/pvfs2-server-init.d-2.7.0 pvfs2-server
		newconfd "${FILESDIR}"/pvfs2-server-conf.d-2.7.0 pvfs2-server
	fi

	newinitd "${FILESDIR}"/pvfs2-client-init.d-2.7.0 pvfs2-client
	newconfd "${FILESDIR}"/pvfs2-client-conf.d-2.7.0 pvfs2-client

	dodoc AUTHORS CREDITS ChangeLog INSTALL README

	# this is LARGE (~5mb)
	if use doc; then
		dodoc doc/multi-fs-doc.txt doc/add-server-req \
			doc/add-client-syscall doc/coding/valgrind \
			doc/coding/backtrace_analysis.txt
		insinto /usr/share/doc/${PF}
		doins doc/*.pdf doc/coding/developer-guidelines.pdf \
			doc/design/*.pdf doc/random/SystemInterfaceTesting.pdf
		if use apidocs; then
			dohtml -A map -A md5 doc/doxygen/html/*
		fi
	fi
	if use examples; then
		docinto examples/heartbeat
		dodoc examples/heartbeat/*
		docinto examples
		dodoc examples/fs.conf
	fi
}

pkg_preinst() {
	linux-mod_pkg_preinst
}

pkg_postinst() {
	linux-mod_pkg_postinst
	local f="$(source "${ROOT}"etc/conf.d/pvfs2-server; echo ${PVFS2_FS_CONF})"
	elog "1.)  Pvfs2 uses a unified configuration file as of 2.7.0.  If you"
	elog "  have configuration files from an earlier version, use the provided:"
	elog "  ${ROOT}usr/bin/pvfs2-config-convert"
	elog "to automatically update to the newer configuration scheme."
	elog "2.)  Use emerge --config pvfs2 to create new configuration files."
	elog "3.)  If the storage space has not been previously created, either set"
	elog "  PVFS2_AUTO_MKFS=1 in ${ROOT}etc/conf.d/pvfs2-server or run:"
	elog "  ${ROOT}usr/sbin/pvfs2-server --mkfs ${f}"
}

pkg_config() {
	local s
	local f="$(source "${ROOT}"etc/conf.d/pvfs2-server; echo ${PVFS2_FS_CONF})"
	if [[ -f "${f}" ]]; then
		ewarn "Previous install detected."
		ewarn "We're about to wipe out ${f} and replace it with"
		ewarn "the file generated by running pvfs2-genconfig.  If this is what"
		ewarn "you want to do, hit any key to continue.  Otherwise hit ctrl+C"
		ewarn "to abort."
		read s
	fi
	einfo "Creating new unified configuration file"
	ewarn "WARNING:  pvfs2 is picky about hostnames.  Make sure you use the"
	ewarn "correct shortname for all nodes and have name resolution for these"
	ewarn "shortnames correctly configured on all nodes."
	[ ! -d "${ROOT}$(dirname "${f}")" ] && mkdir -p "${ROOT}$(dirname "${f}")"
	"${ROOT}"usr/bin/pvfs2-genconfig "${f}"
}