summaryrefslogtreecommitdiff
blob: 210e339d607f5f0ba0a9474f0e339805bfccdb11 (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
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sci-libs/scotch/scotch-5.1.11.ebuild,v 1.2 2011/03/15 16:58:35 bicatali Exp $

EAPI=4

inherit eutils toolchain-funcs versionator alternatives-2

# use esmumps version to allow linking with mumps
MYP="${PN}_${PV}_esmumps"
# download id on gforge changes every goddamn release
DID=28044

DESCRIPTION="Software for graph, mesh and hypergraph partitioning"
HOMEPAGE="http://www.labri.u-bordeaux.fr/perso/pelegrin/scotch/"
SRC_URI="http://gforge.inria.fr/frs/download.php/${DID}/${MYP}.tgz"

LICENSE="CeCILL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc examples mpi static-libs tools"

DEPEND="sys-devel/bison
	sys-libs/zlib
	mpi? ( virtual/mpi )"
RDEPEND="${DEPEND}"

S="${WORKDIR}/${MYP}/src"

make_shared_lib() {
	local libstatic=${1}
	local soname=$(basename "${1%.a}").so.$(get_major_version)
	shift
	einfo "Making ${soname}"
	${LINK:-$(tc-getCC)} ${LDFLAGS}  \
		-shared -Wl,-soname="${soname}" \
		-Wl,--whole-archive "${libstatic}" -Wl,--no-whole-archive \
		"$@" -o $(dirname "${libstatic}")/"${soname}" || die "${soname} failed"
}

src_prepare() {
	epatch "${FILESDIR}"/metis-header.patch
	epatch "${FILESDIR}"/respect-ldflags.patch
	sed -e "s/@CFLAGS@/${CFLAGS}/" \
		-e "s/@CC@/$(tc-getCC)/" \
		-e "s/@AR@/$(tc-getAR)/" \
		-e "s/@RANLIB@/$(tc-getRANLIB)/" \
		"${FILESDIR}"/Makefile.inc.in > Makefile.inc || die
}

src_compile() {
	emake PICFLAGS=-fPIC
	make_shared_lib libscotch/libscotcherr.a
	make_shared_lib libscotch/libscotcherrexit.a
	make_shared_lib libscotch/libscotch.a -L. -lscotcherr -lz -lm -lrt
	make_shared_lib esmumps/libesmumps.a -Llibscotch -lscotch
	make_shared_lib libscotchmetis/libscotchmetis.a -Llibscotch -lscotch

	if use mpi; then
		emake PICFLAGS=-fPIC ptscotch
		export LINK=mpicc
		make_shared_lib libscotch/libptscotcherr.a
		make_shared_lib libscotch/libptscotcherrexit.a
		make_shared_lib libscotch/libptscotch.a -Llibscotch -lptscotcherr -lz -lm -lrt
		make_shared_lib esmumps/libptesmumps.a -Llibscotch -lptscotch
		make_shared_lib libscotchmetis/libptscotchparmetis.a -Llibscotch -lptscotch
	fi
	if use static-libs; then
		emake clean
		emake
		use mpi && emake ptscotch
	fi
}

src_install() {
	cd ..
	local l b m
	for l in $(find . -name \*.so.\*); do
		dolib.so ${l}
		dosym $(basename ${l}) /usr/$(get_libdir)/$(basename ${l%.*})
	done
	use static-libs && dolib.a $(find . -name \*.a)

	insinto /usr/include/scotch
	doins include/*

	cat <<-EOF > scotchmetis.pc
		prefix=${EPREFIX}/usr
		libdir=\${prefix}/$(get_libdir)
		includedir=\${prefix}/include
		Name: ptscotch
		Description: ${DESCRIPTION}
		Version: ${PV}
		URL: ${HOMEPAGE}
		Libs: -L\${libdir} -lscotchmetis -lscotcherr -lscotch
		Private: -lm -lz -lrt
		Cflags: -I\${includedir}/scotch
	EOF
	insinto /usr/$(get_libdir)/pkgconfig
	doins scotchmetis.pc
	alternatives_for metis scotch 0 \
		"/usr/$(get_libdir)/pkgconfig/metis.pc" "scotchmetis.pc"
	cat <<-EOF > ptscotchmetis.pc
		prefix=${EPREFIX}/usr
		libdir=\${prefix}/$(get_libdir)
		includedir=\${prefix}/include
		Name: ptscotch
		Description: ${DESCRIPTION}
		Version: ${PV}
		URL: ${HOMEPAGE}
		Libs: -L\${libdir} -lptscotchmetis -lptscotcherr -lptscotch
		Private: -lm -lz -lrt
		Cflags: -I\${includedir}/scotch
	EOF
	insinto /usr/$(get_libdir)/pkgconfig
	doins ptscotchmetis.pc
	alternatives_for metis-mpi scotch 0 \
		"/usr/$(get_libdir)/pkgconfig/metis-mpi.pc" "ptscotchmetis.pc"

	dodoc README.txt

	if use tools; then
		pushd bin > /dev/null
		for b in *; do
			newbin ${b} scotch_${b}
		done
		popd

		pushd man/man1 > /dev/null
		for m in *; do
			newman ${m} scotch_${m}
		done
		popd > /dev/null
	fi

	use doc && dodoc doc/*.pdf

	if use examples; then
		insinto /usr/share/doc/${PF}/examples
		doins -r examples/* tgt grf
	fi
}