summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Szuba <marecki@gentoo.org>2021-07-16 12:15:53 +0100
committerMarek Szuba <marecki@gentoo.org>2021-07-16 12:43:29 +0100
commit997f31d98075884d1e13a50a767a48ebd5fdebe8 (patch)
tree9582e148b0372fc228d2bbe32f79a797b4966a76 /sci-libs/scotch
parent*/*: update sci-libs/{,par}metis revdeps (diff)
downloadgentoo-997f31d98075884d1e13a50a767a48ebd5fdebe8.tar.gz
gentoo-997f31d98075884d1e13a50a767a48ebd5fdebe8.tar.bz2
gentoo-997f31d98075884d1e13a50a767a48ebd5fdebe8.zip
sci-libs/scotch: extend USE=int64 logic
It is -DINTSIZE64 that changes the library's integer representation, not -DIDXSIZE64; with only the latter set e.g. sci-libs/pastix[int64,scotch] would still complain about a mismatch. Continue to set the latter for now - according to the docs index size is by default assumed to be equivalent to that of the Scotch integer type, however the relevant preprocessor definitions are rather convoluted so let's play it safe and assume they are _not_ in fact in sync. Signed-off-by: Marek Szuba <marecki@gentoo.org>
Diffstat (limited to 'sci-libs/scotch')
-rw-r--r--sci-libs/scotch/scotch-6.1.0-r1.ebuild173
1 files changed, 173 insertions, 0 deletions
diff --git a/sci-libs/scotch/scotch-6.1.0-r1.ebuild b/sci-libs/scotch/scotch-6.1.0-r1.ebuild
new file mode 100644
index 000000000000..ff3058c464b6
--- /dev/null
+++ b/sci-libs/scotch/scotch-6.1.0-r1.ebuild
@@ -0,0 +1,173 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs flag-o-matic multilib
+
+SOVER=$(ver_cut 1)
+
+DESCRIPTION="Software for graph, mesh and hypergraph partitioning"
+HOMEPAGE="https://www.labri.u-bordeaux.fr/perso/pelegrin/scotch/ https://gitlab.inria.fr/scotch/scotch"
+SRC_URI="https://gitlab.inria.fr/${PN}/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.gz"
+S="${WORKDIR}/${PN}-v${PV}"
+
+LICENSE="CeCILL-2"
+SLOT="0/${SOVER}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~sparc ~x86 ~amd64-linux ~x86-linux"
+IUSE="doc int64 mpi static-libs test tools threads"
+# bug #532620
+REQUIRED_USE="test? ( threads )"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ sys-libs/zlib
+ mpi? ( virtual/mpi )"
+RDEPEND="${DEPEND}"
+
+static_to_shared() {
+ local libstatic=${1}; shift
+ local libname=$(basename ${libstatic%.a})
+ local soname=${libname}$(get_libname ${SOVER})
+ local libdir=$(dirname ${libstatic})
+
+ einfo "Making ${soname} from ${libstatic}"
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ ${LINK:-$(tc-getCC)} ${LDFLAGS} \
+ -dynamiclib -install_name "${EPREFIX}"/usr/lib/"${soname}" \
+ -Wl,-all_load -Wl,${libstatic} \
+ "$@" -o ${libdir}/${soname} || die "${soname} failed"
+ else
+ ${LINK:-$(tc-getCC)} ${LDFLAGS} \
+ -shared -Wl,-soname=${soname} \
+ -Wl,--whole-archive ${libstatic} -Wl,--no-whole-archive \
+ "$@" -o ${libdir}/${soname} || die "${soname} failed"
+ VERS_COMP=${PV//.}
+ [[ "${#VERS_COMP}" -gt 1 ]] && \
+ ln -s ${soname} ${libdir}/${libname}$(get_libname ${SOVER})
+ ln -s ${soname} ${libdir}/${libname}$(get_libname)
+ fi
+}
+
+src_prepare() {
+ default
+ use int64 && append-cflags -DINTSIZE64 -DIDXSIZE64
+ if use threads; then
+ append-cflags "-DSCOTCH_PTHREAD_NUMBER=$(nproc)"
+ else
+ append-cflags "-DSCOTCH_PTHREAD_NUMBER=1"
+ sed -i \
+ -e 's/ -DSCOTCH_PTHREAD//' \
+ src/Make.inc/Makefile.inc.i686_pc_linux3 || die
+ fi
+
+ # Be careful with replacing here, bug #577272
+ sed -e "s/= gcc$/= $(tc-getCC)/" \
+ -e "s/-O3/${CFLAGS} -pthread/" \
+ -e "s/= ar$/= $(tc-getAR)/" \
+ -e "s/= ranlib$/= $(tc-getRANLIB)/" \
+ -e "s/= ranlib$/= $(tc-getRANLIB)/" \
+ -e "/^LDFLAGS/ s/$/ ${LDFLAGS}/" \
+ src/Make.inc/Makefile.inc.i686_pc_linux3 > src/Makefile.inc || die
+}
+
+src_compile() {
+ emake -C src CLIBFLAGS=-fPIC scotch esmumps
+ static_to_shared lib/libscotcherr.a
+ static_to_shared lib/libscotcherrexit.a
+ static_to_shared lib/libscotch.a -Llib -lz -lm -lrt -lpthread -lscotcherr
+ static_to_shared lib/libesmumps.a -Llib -lscotch
+ static_to_shared lib/libscotchmetis.a -Llib -lscotch
+
+ if use mpi; then
+ emake -C src CLIBFLAGS=-fPIC ptscotch ptesmumps
+ export LINK=mpicc
+ static_to_shared lib/libptscotcherr.a
+ static_to_shared lib/libptscotcherrexit.a
+ static_to_shared lib/libptscotch.a -Llib -lscotch -lptscotcherr -lz -lm -lrt
+ static_to_shared lib/libptesmumps.a -Llib -lscotch -lptscotch
+ static_to_shared lib/libptscotchparmetis.a -Llib -lscotch -lptscotch
+ fi
+ if use static-libs; then
+ emake -C src clean
+ emake -C src
+ use mpi && emake -C src ptscotch
+ fi
+}
+
+src_test() {
+ LD_LIBRARY_PATH="${S}/lib" emake -C src check
+}
+
+src_install() {
+ dolib.so lib/lib*$(get_libname)*
+ use static-libs && dolib.a lib/*.a
+
+ #install metis headers into a subdir
+ #to allow usage of real metis and scotch
+ #in the same code
+ insinto /usr/include/scotch/metis
+ doins include/*metis*
+ rm include/*metis*
+ insinto /usr/include/scotch
+ doins include/*
+
+ cat <<-EOF > scotchmetis.pc
+ prefix=${EPREFIX}/usr
+ libdir=\${prefix}/$(get_libdir)
+ includedir=\${prefix}/include
+ Name: scotchmetis
+ Description: ${DESCRIPTION}
+ Version: ${PV}
+ URL: ${HOMEPAGE}
+ Libs: -L\${libdir} -lscotchmetis -lscotcherr -lscotch
+ Private: -lm -lz -lrt
+ Cflags: -I\${includedir}/scotch/metis
+ EOF
+ insinto /usr/$(get_libdir)/pkgconfig
+ doins scotchmetis.pc
+
+ # not sure it is actually a full replacement of metis
+ #alternatives_for metis scotch 0 \
+ # /usr/$(get_libdir)/pkgconfig/metis.pc scotchmetis.pc
+
+ if use mpi; then
+ cat <<-EOF > ptscotchparmetis.pc
+ prefix=${EPREFIX}/usr
+ libdir=\${prefix}/$(get_libdir)
+ includedir=\${prefix}/include
+ Name: ptscotchparmetis
+ Description: ${DESCRIPTION}
+ Version: ${PV}
+ URL: ${HOMEPAGE}
+ Libs: -L\${libdir} -lptscotchparmetis -lptscotcherr -lptscotch
+ Private: -lm -lz -lrt
+ Cflags: -I\${includedir}/scotch/metis
+ Requires: scotchmetis
+ EOF
+ insinto /usr/$(get_libdir)/pkgconfig
+ doins ptscotchparmetis.pc
+ # not sure it is actually a full replacement of parmetis
+ #alternatives_for metis-mpi ptscotch 0 \
+ # /usr/$(get_libdir)/pkgconfig/metis-mpi.pc ptscotchparmetis.pc
+ fi
+
+ dodoc README.txt
+
+ if use tools; then
+ local b m
+ pushd bin > /dev/null || die
+ for b in *; do
+ newbin ${b} scotch_${b}
+ done
+ popd > /dev/null || die
+
+ pushd man/man1 > /dev/null || die
+ for m in *.1; do
+ newman ${m} scotch_${m}
+ done
+ popd > /dev/null || die
+ fi
+
+ use doc && dodoc doc/*.pdf
+}