File diff 000000000000 → 000000000000
sci-libs/blas-goto2/blas-goto2-1.13.ebuild
Show inline comments
 
new file 100644
 
# Copyright 1999-2009 Gentoo Foundation
 
# Distributed under the terms of the GNU General Public License v2
 
# $Header: /var/cvsroot/gentoo-x86/sci-libs/blas-goto/blas-goto-1.26.ebuild,v 1.2 2009/08/18 14:22:19 bicatali Exp $
 

	
 
inherit eutils fortran flag-o-matic toolchain-funcs
 

	
 
EAPI="2"
 

	
 
MY_PN="GotoBLAS2"
 
MY_P="${MY_PN}-${PV}"
 
DESCRIPTION="Fast implementations of the Basic Linear Algebra Subroutines"
 
HOMEPAGE="http://www.tacc.utexas.edu/research-development/tacc-projects/"
 
SRC_URI="${MY_P}.tar.gz"
 
LICENSE="tacc"
 
SLOT="0"
 
KEYWORDS="~x86 ~amd64"
 
IUSE="int64 threads doc openmp"
 
RESTRICT="fetch"
 
DOWNLOAD_URL="${HOMEPAGE}"
 

	
 
RDEPEND="app-admin/eselect-blas
 
	doc? ( app-doc/blas-docs )
 
	openmp? ( >=sys-devel/gcc-4.3[openmp] )"
 
DEPEND="app-admin/eselect-blas
 
	>=sys-devel/binutils-2.17"
 

	
 
S="${WORKDIR}/${MY_PN}"
 
FORTRAN="gfortran g77 ifc"
 

	
 
ESELECT_PROF=goto
 

	
 
pkg_nofetch() {
 
	einfo "Please download ${SRC_URI} from"
 
	einfo "${DOWNLOAD_URL}"
 
	einfo "and place it in ${DISTDIR}."
 
}
 

	
 
src_unpack() {
 
	unpack ${A}
 
	cd "${S}"
 

	
 
	# patch to link with m and fortran libs, works with asneeded
 
	epatch "${FILESDIR}"/${P}-sharedlibs.patch
 

	
 
	# Get and test C (cross-) compiler
 
	C_COMPILER=$(tc-getCC)	
 
	if [[ $(tc-getCC) != *gcc ]]; then
 
		ewarn "Your C compiler is set to $(tc-getCC)."
 
		ewarn "${PN} needs gcc to inline assembler, others compilers have reported failures."
 
		die "Incompatible C compiler, need gcc."
 
	fi
 
	
 
	# Get Fortran compiler
 
	case ${FORTRANC} in
 
		g77) F_COMPILER=G77;;
 
		gfortran) F_COMPILER=GFORTRAN;;
 
		ifc|ifort) F_COMPILER=INTEL;;
 
		*)
 
			die "Invalid Fortran compiler: ${FORTRANC}; valid are ${FORTRAN}."
 
	esac
 
	
 
	# Set compilers
 
	sed -i \
 
		-e "s:^# \(CC\s*=\).*:\1 ${C_COMPILER}:g" \
 
		-e "s:^# \(FC\s*=\).*:\1 ${F_COMPILER}:g" \
 
		Makefile.rule \
 
		|| die "sed for compilers failed"
 
	
 
	# Set Threads
 
	use threads && THREADS=1 || THREADS=0
 
	sed -i \
 
		-e "s:^# \(USE_THREAD\s*=\).*:\1 ${THREADS}:g" \
 
		Makefile.rule \
 
		|| die "sed for threads failed"
 
	
 
	# Set BINARY
 
	use amd64 && BINARY=64 || BINARY=32
 
	sed -i \
 
		-e "s:^# \(BINARY\s*=\).*:\1 ${BINARY}:g" \
 
		Makefile.rule \
 
		|| die "sed for binary failed"
 

	
 
	# Set integer interface
 
	use int64 && INT64=1 || INT64=0
 
	use int64 && ESELECT_PROF="${ESELECT_PROF}-int64"
 
	sed -i \
 
		-e "s:^# \(INTERFACE64\s*=\).*:\1 ${INT64}:g" \
 
		Makefile.rule \
 
		|| die "sed for 64 integers failed"
 

	
 
	# Set OpenMP
 
	use openmp && OPENMP=1 || OPENMP=0
 
	sed -i \
 
		-e "s:^# \(USE_OPENMP\s*=\).*:\1 ${OPENMP}:g" \
 
		Makefile.rule \
 
		|| die "sed for 64 binary failed"
 

	
 
}
 

	
 
src_compile() {
 

	
 
	# Make static library
 
	emake LDFLAGS="$(raw-ldflags)" || die "emake failed"
 

	
 
	# Make shared library
 
	cd exports
 
	emake so -j1 || die "emake failed"
 
}
 

	
 
src_test() {
 
	cd test
 
	emake || die "emake test failed"
 
	make clean
 
}
 

	
 
src_install() {
 
	local install_dir=/usr/$(get_libdir)/blas/goto
 
	dodir ${install_dir}
 

	
 
	# dolib.so doesn't support our alternate locations
 
	exeinto ${install_dir}
 
	doexe libgoto2_*.so || die "installing shared lib failed"
 
	dosym libgoto2_*.so ${install_dir}/libgoto2.so
 
	dosym libgoto2_*.so ${install_dir}/libgoto2.so.0
 
	dosym libgoto2_*.so ${install_dir}/libgoto2.so.0.0.0
 

	
 
	# dolib.a doesn't support our alternate locations
 
	insinto ${install_dir}
 
	doins libgoto2_*.a || die "installing static lib failed"
 
	dosym libgoto2_*.a ${install_dir}/libgoto2.a
 

	
 
	dodoc 01Readme.txt 03FAQ.txt || die
 

	
 
	cp "${FILESDIR}"/blas.pc.in blas.pc
 
	local extlibs=""
 
	use threads && extlibs="${extlibs} -lpthread"
 
	sed -i \
 
		-e "s/@LIBDIR@/$(get_libdir)/" \
 
		-e "s/@PV@/${PV}/" \
 
		-e "s/@EXTLIBS@/${extlibs}/" \
 
		blas.pc || die "sed blas.pc failed"
 
	insinto /usr/$(get_libdir)/blas/goto
 
	doins blas.pc
 
	eselect blas add $(get_libdir) "${FILESDIR}"/eselect.blas.goto ${ESELECT_PROF}
 
}
 

	
 
pkg_postinst() {
 
	local p=blas
 
	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
 
}