summaryrefslogtreecommitdiff
blob: 8ed746549ad9ba4b457054d7a9f938955aa910df (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
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sci-libs/lapack-reference/lapack-reference-3.0.ebuild,v 1.2 2004/12/29 18:34:39 ribosome Exp $

inherit eutils

MyPN=${PN/-reference/}

DESCRIPTION="FORTRAN reference implementation of LAPACK Linear Algebra PACKage"
HOMEPAGE="http://www.netlib.org/lapack/index.html"
SRC_URI="http://www.netlib.org/lapack/${MyPN}.tgz
	mirror://gentoo/${MyPN}-20020531-20021004.patch.bz2
	mirror://gentoo/${MyPN}-gentoo.patch"

LICENSE="lapack"
SLOT="0"
KEYWORDS="~x86 ~amd64"
IUSE="ifc"

DEPEND="sys-devel/libtool
	sci-libs/lapack-config
	ifc? ( dev-lang/ifc )"

RDEPEND="virtual/blas
	ifc? ( dev-lang/ifc )" # Need ifc runtime libraries

PROVIDE="virtual/lapack"

S=${WORKDIR}/LAPACK

ifc_info() {
	if [ -z "${IFCFLAGS}" ]
	then
		einfo
		einfo "You may want to set some ifc optimization flags by running this"
		einfo "ebuild as, for example, \`IFCFLAGS=\"-O3 -tpp7 -xW\" emerge blas\`"
		einfo "(Pentium 4 exclusive optimizations)."
		einfo
		einfo "ifc defaults to -O2, with code tuned for Pentium 4, but that"
		einfo "will run on any processor."
		einfo
		einfo "Beware that ifc's -O3 is very aggressive, sometimes resulting in"
		einfo "significantly worse performance."
		einfo
		epause 5
	fi
}

pkg_setup() {
	# This version of lapack *can* be build completely with ifc
	use ifc || \
	if [ -z `which g77` ]; then
		eerror "g77 not found on the system!"
		eerror "Please add f77 to your USE flags and reemerge gcc!"
		die
	fi
}

src_unpack() {
	unpack ${A}
	epatch ${DISTDIR}/lapack-20020531-20021004.patch.bz2
	epatch ${DISTDIR}/lapack-gentoo.patch
}

src_compile() {
	TOP_PATH=${DESTTREE}/lib/lapack
	# Library will be installed in RPATH:
	RPATH=${TOP_PATH}/reference

	if use ifc
	then
		FC="ifc"
		FFLAGS="${IFCFLAGS}"
		NOOPT="-O0" # Do NOT change this. It is applied to two files with
					# routines to determine machine constants.
		ifc_info
	else
		FC="g77"
		FFLAGS="${CFLAGS}"
		NOOPT=""
		# libg2c is required to link with liblapack.so using ifc:
		DEP_LIBS="-lg2c"
	fi

	DEP_LIBS="${DEP_LIBS} -lblas"

	cd ${S}/SRC
	make all \
		FORTRAN="libtool --mode=compile --tag=F77 ${FC}"\
		OPTS="${FFLAGS}"\
		NOOPT="${NOOPT}" \
		|| die

	if use ifc
	then
		${FC} -shared ${FFLAGS} *.lo ${DEP_LIBS} \
			-Wl,-soname -Wl,liblapack.so.0 -o liblapack.so.0.0.0 \
			-Vaxlib # Intel portability library that provides the etime function
		ar cru liblapack.a *.o
		ranlib liblapack.a
	else
		libtool --mode=link --tag=CC ${FC} ${FFLAGS} -o liblapack.la *.lo \
			-rpath ${RPATH} ${DEP_LIBS}
	fi
}

src_install() {
	dodir ${RPATH}

	cd ${S}/SRC

	if use ifc
	then
		strip --strip-unneeded liblapack.so.0.0.0
		strip --strip-debug liblapack.a

		exeinto ${RPATH}
		doexe liblapack.so.0.0.0
		dosym liblapack.so.0.0.0 ${RPATH}/liblapack.so.0
		dosym liblapack.so.0.0.0 ${RPATH}/liblapack.so

		insinto ${RPATH}
		doins liblapack.a
	else
		libtool --mode=install install -s liblapack.la ${D}/${RPATH}
	fi

	insinto ${TOP_PATH}
	doins ${FILESDIR}/f77-reference

	dodoc ${S}/README
}

pkg_postinst() {
	${DESTTREE}/bin/lapack-config reference
}