You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sci-libs/acml/acml-4.0.1.ebuild

180 lines
4.8 KiB

# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sci-libs/acml/acml-4.0.1.ebuild,v 1.10 2012/10/16 20:48:56 jlec Exp $
inherit eutils fortran-2 multilib toolchain-funcs
MY_PV=${PV//\./\-}
DESCRIPTION="AMD Core Math Library (ACML) for x86_64 CPUs"
HOMEPAGE="http://developer.amd.com/acml.jsp"
SRC_URI="
ifc? ( acml-${MY_PV}-ifort-64bit.tgz )
!ifc? (
int64? ( acml-${MY_PV}-gfortran-64bit-int64.tgz )
!int64? ( acml-${MY_PV}-gfortran-64bit.tgz )
)"
SLOT="0"
LICENSE="ACML"
KEYWORDS="~amd64"
IUSE="openmp ifc int64 doc examples"
RESTRICT="strip fetch"
DEPEND="
ifc? ( dev-lang/ifc )
app-admin/eselect-blas
app-admin/eselect-lapack"
RDEPEND="${DEPEND}
doc? ( app-doc/blas-docs app-doc/lapack-docs )"
S="${WORKDIR}"
pkg_nofetch() {
einfo "Please download the ACML from:"
einfo "${HOMEPAGE}"
einfo "and place it in ${DISTDIR}."
einfo "The previous versions could be found at"
einfo "http://developer.amd.com/acmlarchive.jsp"
einfo "SRC=${A} $SRC_URI"
}
get_fcomp() {
case $(tc-getFC) in
*gfortran* )
FCOMP="gfortran" ;;
ifort )
FCOMP="ifc" ;;
* )
FCOMP=$(tc-getFC) ;;
esac
}
pkg_setup() {
if [[ $(tc-getFC) =~ gfortran ]]; then
local gcc_version=$(gcc-major-version)$(gcc-minor-version)
if ! use openmp && (( ${gcc_version} != 41 )); then
eerror "You need gcc-4.1.x to test acml."
eerror "Please use gcc-config to swicth gcc version 4.1.x"
die "setup gcc failed"
fi
fi
if use openmp; then
tc-has-openmp || die "Please ensure your compiler has openmp support"
FORTRAN_NEED_OPENMP=1
fi
fortran-2_pkg_setup
get_fcomp
}
src_unpack() {
unpack ${A}
(DISTDIR="${S}" unpack contents-acml-*.tgz)
case ${FCOMP} in
gfortran) FORT=gfortran ;;
if*) FORT=ifort ;;
*) eerror "Unsupported fortran compiler: $(tc-getFC)"
die "failed configuring fortran";;
esac
use openmp || rm -rf ${FORT}*_mp*
FORTDIRS="$(ls -d ${FORT}*)"
}
src_test() {
local forts=${FORTDIRS}
# only testing with current compiler
use openmp && forts="$(ls -d ${FORT}*_mp*)"
for fort in ${forts}; do
einfo "Testing acml for ${fort}"
cd "${S}"/${fort}/examples
for d in . acml_mv; do
cd "${S}"/${fort}/examples/${d}
emake \
ACMLDIR="${S}"/${fort} \
F77=$(tc-getFC) \
CC="$(tc-getCC)" \
CPLUSPLUS="$(tc-getCXX)" \
|| die "emake test in ${fort}/examples/${d} failed"
emake clean
done
done
}
src_install() {
# respect acml default install dir (and FHS)
local instdir=/opt/${PN}${PV}
dodir ${instdir}
for fort in ${FORTDIRS}; do
# install acml
use examples || rm -rf "${S}"/${fort}/examples
cp -pPR "${S}"/${fort} "${D}"${instdir} || die "copy ${fort} failed"
# install profiles
ESELECT_PROF=acml-${FCOMP}
local acmldir=${instdir}/${fort}
local acmllibs="-lacml -lacml_mv"
local libname=${acmldir}/lib/libacml
local extlibs=
local extflags=
if [[ ${fort} =~ int64 ]]; then
ESELECT_PROF=${ESELECT_PROF}-int64
extflags="${extflags} -fdefault-integer-8"
fi
[[ ${fort} =~ gfortran ]] && extlibs="${extlibs} -lgfortran"
if [[ ${fort} =~ _mp ]]; then
ESELECT_PROF=${ESELECT_PROF}-openmp
extlibs="${extlibs} -lpthread"
acmllibs="-lacml_mp -lacml_mv"
libname=${libname}_mp
extflags="${extflags} -fopenmp"
fi
for l in blas lapack; do
# pkgconfig files
sed -e "s:@LIBDIR@:$(get_libdir):" \
-e "s:@PV@:${PV}:" \
-e "s:@ACMLDIR@:${acmldir}:g" \
-e "s:@ACMLLIBS@:${acmllibs}:g" \
-e "s:@EXTLIBS@:${extlibs}:g" \
-e "s:@EXTFLAGS@:${extflags}:g" \
"${FILESDIR}"/${l}.pc.in > ${l}.pc \
|| die "sed ${l}.pc failed"
insinto ${acmldir}/lib
doins ${l}.pc || die "doins ${l}.pc failed"
# eselect files
cat > eselect.${l} <<-EOF
${libname}.so /usr/@LIBDIR@/lib${l}.so.0
${libname}.so /usr/@LIBDIR@/lib${l}.so
${libname}.a /usr/@LIBDIR@/lib${l}.a
${acmldir}/lib/${l}.pc /usr/@LIBDIR@/pkgconfig/${l}.pc
EOF
eselect ${l} add $(get_libdir) eselect.${l} ${ESELECT_PROF}
done
echo "LDPATH=${instdir}/${fort}/lib" > 35acml
done
doenvd 35acml || die "doenvd failed"
use doc || rm -rf "${S}"/Doc/acml.pdf "${S}"/Doc/html
cp -pPR "${S}"/Doc "${D}"${instdir} || die "copy doc failed"
}
pkg_postinst() {
for p in blas lapack; do
local current_lib=$(eselect ${p} show | cut -d' ' -f2)
if [[ ${current_lib} == ${ESELECT_PROF} || -z ${current_lib} ]]; then
# work around eselect bug #189942
local configfile="${ROOT}"/etc/env.d/${p}/$(get_libdir)/config
[[ -e ${configfile} ]] && rm -f ${configfile}
eselect ${p} set ${ESELECT_PROF}
elog "${p} has been eselected to ${ESELECT_PROF}"
else
elog "Current eselected ${p} is ${current_lib}"
elog "To use ${p} ${ESELECT_PROF} implementation, you have to issue (as root):"
elog "\t eselect ${p} set ${ESELECT_PROF}"
fi
done
}