From 6fb2f4e8860e2ccdf204e734333e11c026dbd066 Mon Sep 17 00:00:00 2001 From: Honza Macháček Date: Thu, 19 Sep 2013 09:56:37 +0200 Subject: sci-physics/openm updated to 3.7.6, corrected linking with fortran code using gcc. Package-Manager: portage-2.2.1 --- sci-physics/openmx/openmx-3.7.6.ebuild | 171 +++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 sci-physics/openmx/openmx-3.7.6.ebuild (limited to 'sci-physics/openmx/openmx-3.7.6.ebuild') diff --git a/sci-physics/openmx/openmx-3.7.6.ebuild b/sci-physics/openmx/openmx-3.7.6.ebuild new file mode 100644 index 000000000..bb44f1648 --- /dev/null +++ b/sci-physics/openmx/openmx-3.7.6.ebuild @@ -0,0 +1,171 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=5 + +inherit eutils multilib toolchain-funcs fortran-2 + +PATCHDATE="13Sep01" + +DESCRIPTION="Material eXplorer using DFT, NC pseudopotentials, and pseudo-atomic localized basis functions" +HOMEPAGE="http://www.openmx-square.org/" +SRC_URI=" + http://www.openmx-square.org/${PN}${PV%.[0-9]}.tar.gz + http://www.openmx-square.org/bugfixed/${PATCHDATE}/patch${PV}.tar.gz" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="-debug mpi openmp test" + +RDEPEND=" + virtual/blas + virtual/lapack + sci-libs/fftw:3.0[mpi?,openmp?] + mpi? ( virtual/mpi )" +DEPEND="${RDEPEND} + virtual/pkgconfig" + +S="${WORKDIR}/${PN}${PV%.[0-9]}" + +MAKEOPTS+=" -j1" + +FORTRAN_STANDARD=90 + +pkg_setup() { + # Link in the GNU Fortran library for Fortran code. + # Other compilers may need other hacks. + FC_LIB="" + if [[ $(tc-getCC)$ == *gcc* ]]; then + FC_LIB="-lgfortran" + fi + export FC_LIB + + if use mpi; then + export CC="mpicc" + export FC="mpif90" + else + tc-export CC + tc-export FC + fi + + if use openmp; then FORTRAN_NEED_OPENMP=1; fi + + fortran-2_pkg_setup + + if use openmp; then + # based on _fortran-has-openmp() of fortran-2.eclass + local code=ebuild-openmp-flags + local ret + local openmp + + pushd "${T}" + cat <<- EOF > "${code}.c" + # include + main () { + int nthreads; + nthreads=omp_get_num_threads(); + } + EOF + + for openmp in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do + ${CC} ${openmp} "${code}.c" -o "${code}.o" &>> "${T}"/_c_compile_test.log + ret=$? + (( ${ret} )) || break + done + + rm -f "${code}.*" + popd + + if (( ${ret} )); then + die "Please switch to an openmp compatible C compiler" + else + export CC="${CC} ${openmp}" + fi + + pushd "${T}" + cat <<- EOF > "${code}.f" + 1 call omp_get_num_threads + 2 end + EOF + + for openmp in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do + ${FC} ${openmp} "${code}.f" -o "${code}.o" &>> "${T}"/_f_compile_test.log + ret=$? + (( ${ret} )) || break + done + + rm -f "${code}.*" + popd + + if (( ${ret} )); then + die "Please switch to an openmp compatible fortran compiler" + else + export FC="${FC} ${openmp}" + fi + fi + +} + +src_prepare() { + cd "${WORKDIR}" + mv *.[hc] "${S}"/source + epatch "${FILESDIR}/3.7-fortran_objects.patch" +} + +src_configure() { + local FFTW_FLAVOUR=fftw3 + if use openmp; then + FFTW_FLAVOUR=fftw3_omp + else + export CFLAGS="${CFLAGS} -Dnoomp" + fi + if use mpi; then + FFTW_FLAVOUR=fftw3_mpi + else + export CFLAGS="${CFLAGS} -Dnompi" + fi + CFLAGS="${CFLAGS} $($(tc-getPKG_CONFIG) --cflags lapack)" + CFLAGS="${CFLAGS} $($(tc-getPKG_CONFIG) --cflags ${FFTW_FLAVOUR})" + export CFLAGS + + FCFLAGS="${FCFLAGS} -I/usr/include" + FCFLAGS="${FCFLAGS} $($(tc-getPKG_CONFIG) --cflags lapack)" + FCFLAGS="${FCFLAGS} $($(tc-getPKG_CONFIG) --cflags ${FFTW_FLAVOUR})" + export FCFLAGS + + local MX_LIB="$($(tc-getPKG_CONFIG) --static --libs lapack)" + MX_LIB="${MX_LIB} $($(tc-getPKG_CONFIG) --static --libs ${FFTW_FLAVOUR})" + if use mpi; then + MX_LIB="${MX_LIB} $(mpif90 -showme:link)" + fi + + sed \ + -e "s%^CC *=.*$%CC = ${CC} ${CFLAGS}%" \ + -e "s%^FC *=.*$%FC = ${FC} ${FCFLAGS}%" \ + -e "s%^LIB *=.*$%LIB = ${MX_LIB} ${FC_LIB}%" \ + -i source/makefile || die +} + +src_compile() { + emake -C source +} + +src_test() { + cd work + ../source/openmx -runtest || die +} + +src_install() { + insinto /usr/share/${P} + doins -r DFT_DATA13 + cd work + insinto /usr/share/${P}/examples + doins -r * + cd ../source + dodir /usr/bin + emake DESTDIR="${D}/usr/bin" install + dodoc "${S}/${PN}${PV%.?}.pdf" + use test && dodoc "${S}"/work/runtest.result +} -- cgit v1.2.3-65-gdbad