# Copyright 1999-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 EAPI=6 inherit cmake-utils toolchain-funcs multilib toolchain-funcs DESCRIPTION="Scientific library collection for large scale problems" HOMEPAGE="http://trilinos.sandia.gov/" SRC_URI="http://trilinos.org/oldsite/download/files/${P}-Source.tar.gz" KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" LICENSE="BSD LGPL-2.1" SLOT="0" IUSE=" adolc arprec boost clp cppunit cuda eigen glpk gtest hdf5 hwloc hypre matio metis mkl mumps netcdf petsc qd scalapack scotch sparse superlu taucs tbb test threads tvmet yaml zlib X " # TODO: fix export cmake function for tests RESTRICT="test" RDEPEND=" sys-libs/binutils-libs virtual/blas virtual/lapack virtual/mpi adolc? ( sci-libs/adolc ) arprec? ( sci-libs/arprec ) boost? ( dev-libs/boost ) clp? ( sci-libs/coinor-clp ) cuda? ( >=dev-util/nvidia-cuda-toolkit-3.2 ) eigen? ( dev-cpp/eigen:3 ) gtest? ( dev-cpp/gtest ) hdf5? ( sci-libs/hdf5[mpi] ) hypre? ( sci-libs/hypre ) hwloc? ( sys-apps/hwloc ) matio? ( sci-libs/matio ) mkl? ( sci-libs/mkl ) metis? ( || ( sci-libs/parmetis sci-libs/metis ) ) mumps? ( sci-libs/mumps ) netcdf? ( sci-libs/netcdf ) petsc? ( sci-mathematics/petsc ) qd? ( sci-libs/qd ) scalapack? ( virtual/scalapack ) scotch? ( sci-libs/scotch ) sparse? ( sci-libs/cxsparse sci-libs/umfpack ) superlu? ( sci-libs/superlu ) taucs? ( sci-libs/taucs ) tbb? ( dev-cpp/tbb ) tvmet? ( dev-libs/tvmet ) yaml? ( dev-cpp/yaml-cpp ) zlib? ( sys-libs/zlib ) X? ( x11-libs/libX11 )" DEPEND="${RDEPEND} virtual/pkgconfig" S="${WORKDIR}/${P}-Source" PATCHES=( "${FILESDIR}"/${PN}-11.14.1-fix-install-paths.patch \ "${FILESDIR}"/${P}-fix_install_paths_for_destdir.patch "${FILESDIR}"/${P}-fix_sundance_compilation.patch "${FILESDIR}"/${P}-superlu-5.patch ) trilinos_conf() { local dirs libs d for d in $($(tc-getPKG_CONFIG) --libs-only-L $1); do dirs="${dirs};${d:2}" done [[ -n ${dirs} ]] && mycmakeargs+=( "-D${2}_LIBRARY_DIRS=${dirs:1}" ) for d in $($(tc-getPKG_CONFIG) --libs-only-l $1); do libs="${libs};${d:2}" done [[ -n ${libs} ]] && mycmakeargs+=( "-D${2}_LIBRARY_NAMES=${libs:1}" ) dirs="" for d in $($(tc-getPKG_CONFIG) --cflags-only-I $1); do dirs="${dirs};${d:2}" done [[ -n ${dirs} ]] && mycmakeargs+=( "-D${2}_INCLUDE_DIRS=${dirs:1}" ) } src_configure() { local mycmakeargs=( -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX="${EPREFIX}" -DTrilinos_INSTALL_CONFIG_DIR="${EPREFIX}/usr/$(get_libdir)/cmake" -DTrilinos_INSTALL_INCLUDE_DIR="${EPREFIX}/usr/include/trilinos" -DTrilinos_INSTALL_LIB_DIR="${EPREFIX}/usr/$(get_libdir)/trilinos" -DTrilinos_ENABLE_ALL_PACKAGES=ON -DTrilinos_ENABLE_CTrilinos=OFF -DTrilinos_ENABLE_PyTrilinos=OFF -DTrilinos_ENABLE_SEACASExodiff="$(usex netcdf)" -DTrilinos_ENABLE_SEACASExodus="$(usex netcdf)" -DTrilinos_ENABLE_TESTS="$(usex test)" -DZoltan2_ENABLE_Experimental=ON -DTPL_ENABLE_BinUtils=ON -DTPL_ENABLE_BLAS=ON -DTPL_ENABLE_LAPACK=ON -DTPL_ENABLE_MPI=ON -DTPL_ENABLE_ADOLC="$(usex adolc)" -DTPL_ENABLE_AMD="$(usex sparse)" -DTPL_ENABLE_ARPREC="$(usex arprec)" -DTPL_ENABLE_BLACS="$(usex scalapack)" -DTPL_ENABLE_BoostLib="$(usex boost)" -DTPL_ENABLE_Boost="$(usex boost)" -DTPL_ENABLE_Clp="$(usex clp)" -DTPL_ENABLE_Cppunit="$(usex cppunit)" -DTPL_ENABLE_CSparse="$(usex sparse)" -DTPL_ENABLE_CUDA="$(usex cuda)" -DTPL_ENABLE_CUSPARSE="$(usex cuda)" -DTPL_ENABLE_Eigen="$(usex eigen)" -DTPL_ENABLE_GLPK="$(usex glpk)" -DTPL_ENABLE_gtest="$(usex gtest)" -DTPL_ENABLE_HDF5="$(usex hdf5)" -DTPL_ENABLE_HWLOC="$(usex hwloc)" -DTPL_ENABLE_HYPRE="$(usex hypre)" -DTPL_ENABLE_Matio="$(usex matio)" -DTPL_ENABLE_METIS="$(usex metis)" -DTPL_ENABLE_MKL="$(usex mkl)" -DTPL_ENABLE_MUMPS="$(usex mumps)" -DTPL_ENABLE_Netcdf="$(usex netcdf)" -DTPL_ENABLE_PARDISO_MKL="$(usex mkl)" -DTPL_ENABLE_PETSC="$(usex petsc)" -DTPL_ENABLE_Pthread="$(usex threads)" -DTPL_ENABLE_QD="$(usex qd)" -DTPL_ENABLE_SCALAPACK="$(usex scalapack)" -DTPL_ENABLE_Scotch="$(usex scotch)" -DTPL_ENABLE_SuperLU="$(usex superlu)" -DTPL_ENABLE_TAUCS="$(usex taucs)" -DTPL_ENABLE_TBB="$(usex tbb)" -DTPL_ENABLE_Thrust="$(usex cuda)" -DTPL_ENABLE_TVMET="$(usex tvmet)" -DTPL_ENABLE_UMFPACK="$(usex sparse)" -DTPL_ENABLE_X11="$(usex X)" -DTPL_ENABLE_yaml-cpp="$(usex yaml)" -DTPL_ENABLE_Zlib="$(usex zlib)" ) use eigen && \ mycmakeargs+=( -DEigen_INCLUDE_DIRS="${EPREFIX}/usr/include/eigen3" ) use hypre && \ mycmakeargs+=( -DHYPRE_INCLUDE_DIRS="${EPREFIX}/usr/include/hypre" ) use scotch && \ mycmakeargs+=( -DScotch_INCLUDE_DIRS="${EPREFIX}/usr/include/scotch" ) # cxsparse is a rewrite of csparse + extras use sparse && \ mycmakeargs+=( -DCSparse_LIBRARY_NAMES="cxsparse" ) # mandatory blas and lapack trilinos_conf blas BLAS trilinos_conf lapack LAPACK use superlu && trilinos_conf superlu SuperLU use metis && trilinos_conf metis METIS # blacs library is included in scalapack these days if use scalapack; then trilinos_conf scalapack SCALAPACK mycmakeargs+=( -DBLACS_LIBRARY_NAMES="scalapack" -DBLACS_INCLUDE_DIRS="${EPREFIX}/usr/include/blacs" ) fi # # Make sure we use the compiler wrappers in order to build trilinos. # export CC=mpicc CXX=mpicxx && tc-export CC CXX # # cmake-utils eclass patches the base directory CMakeLists.txt # which does not work for complex Trilinos CMake modules # CMAKE_BUILD_TYPE=RELEASE cmake-utils_src_configure } src_install() { cmake-utils_src_install # Clean up the mess: rm -r "${ED}"/TrilinosRepoVersion.txt "${ED}"/lib || die "rm failed" mv "${ED}"/bin "${ED}/usr/$(get_libdir)"/trilinos || die "mv failed" # # register $(get_libdir)/trilinos in LDPATH so that the dynamic linker # has a chance to pick up the libraries... # cat >> "${T}"/99trilinos <<- EOF LDPATH="${EPREFIX}/usr/$(get_libdir)/trilinos" PATH="${EPREFIX}/usr/$(get_libdir)/trilinos/bin" EOF doenvd "${T}"/99trilinos }