summaryrefslogtreecommitdiff
blob: 19e3f2487f395dddff68381d2e92d8af7de6ccb5 (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
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=6

inherit eutils fortran-2 toolchain-funcs multilib

# TODO:
# testing: emake examples?
# better doc instalation and building
# pypastix (separate package?)
# multilib with eselect?
# static libs building without pic
# metis?

# commit id: change every version
CID=
# package id: change every version, see the link on inriaforge
PID=35070
# leave empty if this is not a post release bug fix
PPV=bugfix10_
MYPN=pastix_release

DESCRIPTION="Parallel solver for very large sparse linear systems"
HOMEPAGE="http://pastix.gforge.inria.fr"
SRC_URI="https://gforge.inria.fr/frs/download.php/${PID}/${PN}_${PV}.tar.bz2"

LICENSE="CeCILL-C"
SLOT="0"
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
#IUSE="doc int64 mpi smp starpu static-libs"
IUSE="doc int64 mpi starpu static-libs"

RDEPEND="
	sci-libs/scotch:0=[int64?,mpi?]
	sys-apps/hwloc:0=
	virtual/blas
	mpi? ( virtual/mpi )
	starpu? ( dev-libs/starpu:0= )"
DEPEND="${RDEPEND}
	virtual/pkgconfig"

S="${WORKDIR}/${PN}_${PV}/src"

src_prepare() {
	sed -e 's/^\(HOSTARCH\s*=\).*/\1 ${HOST}/' \
		-e "s:^\(CCPROG\s*=\).*:\1 $(tc-getCC):" \
		-e "s:^\(CFPROG\s*=\).*:\1 $(tc-getFC):" \
		-e "s:^\(CF90PROG\s*=\).*:\1 $(tc-getFC):" \
		-e "s:^\(MPCCPROG\s*=\).*:\1 mpicc -cc=$(tc-getCC):" \
		-e "s:^\(MPCXXPROG\s*=\).*:\1 mpic++ -cxx=$(tc-getCXX):" \
		-e "s:^\(MCFPROG\s*=\).*:\1 mpif90 -f90=$(tc-getFC):" \
		-e "s:^\(ARPROG\s*=\).*:\1 $(tc-getAR):" \
		-e "s:^\(CCFOPT\s*=\).*:\1 ${FFLAGS}:" \
		-e "s:^\(CCFDEB\s*=\).*:\1 ${FFLAGS}:" \
		-e 's:^\(EXTRALIB\s*=\).*:\1 -lm -lrt:' \
		-e "s:^#\s*\(ROOT\s*=\).*:\1 \$(DESTDIR)${EPREFIX%/}/usr:" \
		-e 's:^#\s*\(INCLUDEDIR\s*=\).*:\1 $(ROOT)/include:' \
		-e 's:^#\s*\(BINDIR\s*=\).*:\1 $(ROOT)/bin:' \
		-e "s:^#\s*\(LIBDIR\s*=\).*:\1 \$(ROOT)/$(get_libdir):" \
		-e 's:^#\s*\(SHARED\s*=\).*:\1 1:' \
		-e 's:^#\s*\(SOEXT\s*=\).*:\1 .so:' \
		-e '/fPIC/s/^#//g' \
		-e "s:^#\s*\(SHARED_FLAGS\s*=.*\):\1 ${LDFLAGS}:" \
		-e "s:pkg-config:$(tc-getPKG_CONFIG):g" \
		-e "s:^\(BLASLIB\s*=\).*:\1 $($(tc-getPKG_CONFIG) --libs blas):" \
		-e "s:^\s*\(HWLOC_HOME\s*?=\).*:\1 ${EPREFIX}/usr:" \
		-e "s:-I\$(HWLOC_INC):$($(tc-getPKG_CONFIG) --cflags hwloc):" \
		-e "s:-L\$(HWLOC_LIB) -lhwloc:$($(tc-getPKG_CONFIG) --libs hwloc):" \
		-e "s:^\s*\(SCOTCH_HOME\s*?=\).*:\1 ${EPREFIX}/usr:" \
		-e "s:^\s*\(SCOTCH_INC\s*?=.*\):\1/scotch:" \
		-e "s:^\s*\(SCOTCH_LIB\s*?=.*\)lib:\1$(get_libdir):" \
		config/LINUX-GNU.in > config.in || die
	sed -i -e 's/__SO_NAME__,$@/__SO_NAME__,$(notdir $@)/g' Makefile || die
	default
}

src_configure() {
	if use amd64; then
		sed -i \
			-e 's/^\(VERSIONBIT\s*=\).*/\1 _64bit/' config.in || die
	fi

	if use int64; then
		sed -i \
			-e '/VERSIONINT.*_int64/s/#//' \
			-e '/CCTYPES.*INTSSIZE64/s/#//' config.in || die
	fi

	if ! use mpi; then
		sed -i \
			-e '/VERSIONMPI.*_nompi/s/#//' \
			-e '/CCTYPES.*NOMPI/s/#//' \
			-e '/MPCCPROG\s*= $(CCPROG)/s/#//' \
			-e '/MCFPROG\s*= $(CFPROG)/s/#//' \
			-e 's/-DDISTRIBUTED//' \
			-e 's/-lptscotch/-lscotch/g' \
			config.in || die
	fi

#	if ! use smp; then
#		sed \
#			-e '/VERSIONSMP.*_nosmp/s/#//' \
#			-e '/CCTYPES.*NOSMP/s/#//' \
#			-i config.in || die
#	fi

	if use starpu; then
		sed -i -e '/libstarpu/s/#//g' config.in || die
	fi
}

src_compile() {
	emake all drivers
}

src_install() {
	default
	sed -i -e "s:${D}::g" "${ED}"/usr/bin/pastix-conf || die
	# quick and dirty (static libs should really be built without pic)
	cd .. || die
	dodoc README.txt doc/refcard/refcard.pdf
}