summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sci-libs/acml/acml-3.6.1-r1.ebuild')
-rw-r--r--sci-libs/acml/acml-3.6.1-r1.ebuild173
1 files changed, 173 insertions, 0 deletions
diff --git a/sci-libs/acml/acml-3.6.1-r1.ebuild b/sci-libs/acml/acml-3.6.1-r1.ebuild
new file mode 100644
index 000000000000..7ae06fc40a19
--- /dev/null
+++ b/sci-libs/acml/acml-3.6.1-r1.ebuild
@@ -0,0 +1,173 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sci-libs/acml/acml-3.6.1-r1.ebuild,v 1.1 2007/10/08 20:47:04 bicatali Exp $
+
+inherit eutils toolchain-funcs fortran
+
+DESCRIPTION="AMD Core Math Library (ACML) for x86 and amd64 CPUs"
+HOMEPAGE="http://developer.amd.com/acml.jsp"
+
+MY_PV=${PV//\./\-}
+S=${WORKDIR}
+SRC_URI="x86? ( acml-${MY_PV}-gfortran-32bit.tgz )
+ amd64? ( ( acml-${MY_PV}-gfortran-64bit.tgz )
+ int64? ( acml-${MY_PV}-gfortran-64bit-int64.tgz ) )"
+
+
+RESTRICT="strip fetch"
+IUSE="openmp int64 doc examples"
+LICENSE="ACML"
+KEYWORDS="~amd64 ~x86"
+SLOT="0"
+
+DEPEND="app-admin/eselect-blas
+ app-admin/eselect-lapack
+ dev-util/pkgconfig
+ openmp? ( >=sys-devel/gcc-4.2 )
+ !openmp? ( =sys-devel/gcc-4.1* )"
+
+RDEPEND="${DEPEND}
+ doc? ( app-doc/blas-docs app-doc/lapack-docs )"
+
+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"
+}
+
+pkg_setup() {
+ elog "From version 3.5.0 on, ACML no longer supports"
+ elog "hardware without SSE/SSE2 instructions. "
+ elog "For older 32-bit hardware that does not support SSE/SSE2,"
+ elog "you must continue to use an older version (ACML 3.1.0 and ealier)."
+ FORTRAN="gfortran"
+ fortran_pkg_setup
+ if [[ ${FORTRANC} == 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"
+ elif use openmp && (( ${gcc_version} != 42 )); then
+ eerror "You need gfortran >= 4.2 to use openmp features."
+ eerror "Please use gcc-config to switch gcc version >= 4.2"
+ die "setup gcc failed"
+ fi
+ fi
+}
+
+src_unpack() {
+ unpack ${A}
+ (DISTDIR="${S}" unpack contents-acml-*.tgz)
+ case ${FORTRANC} in
+ gfortran) FORT=gfortran ;;
+ ifc|ifort) FORT=ifort ;;
+ *) eerror "Unsupported fortran compiler: ${FORTRANC}"
+ die ;;
+ esac
+ use openmp || rm -rf ${FORT}*_mp*
+ FORTDIRS="$(ls -d ${FORT}*)"
+}
+
+src_compile() {
+ einfo "Nothing to compile"
+}
+
+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=${FORTRANC} \
+ 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-${FORTRANC}
+ local acmldir=${instdir}/${fort}
+ local libname=${acmldir}/lib/libacml
+ local extlibs
+ local extflags
+ if [[ ${fort} =~ int64 ]]; then
+ ESELECT_PROF=${ESELECT_PROF}-int64
+ extflags="${extflags} -fdefault-integer-8"
+ fi
+ if [[ ${fort} =~ _mp ]]; then
+ ESELECT_PROF=${ESELECT_PROF}-openmp
+ extlibs=-lpthread
+ 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:@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
+
+ # 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=${acmldir}/lib" > "${S}"/35acml
+ echo "INCLUDE=${acmldir}/include" >> "${S}"/35acml
+ done
+
+ doenvd "${S}"/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_p=$(eselect ${p} show | cut -d' ' -f2)
+ # uncomment when eselect bug #189942 is fixed, together with DEPEND
+ #if [[ -z ${current_p} || ${current_p} == ${ESELECT_PROF} ]]; then
+ if [[ -z ${current_p} ]]; then
+ eselect ${p} set ${ESELECT_PROF}
+ elog "${p} has been eselected to ${ESELECT_PROF}"
+ else
+ elog "Current eselected ${p} is ${current_p}"
+ elog "To use ${p} ${ESELECT_PROF} implementation, you have to issue (as root):"
+ elog "\t eselect ${p} set ${ESELECT_PROF}"
+ fi
+ done
+ if use openmp; then
+ elog "Remember that if you want to use openmp"
+ elog "You need to switch to gcc >= 4.2 with gcc-config"
+ elog "When using ACML without openmp, stick with gcc-4.1.x"
+ fi
+}