diff options
Diffstat (limited to 'sci-libs/coinor-csdp/coinor-csdp-6.2.0.ebuild')
-rw-r--r-- | sci-libs/coinor-csdp/coinor-csdp-6.2.0.ebuild | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/sci-libs/coinor-csdp/coinor-csdp-6.2.0.ebuild b/sci-libs/coinor-csdp/coinor-csdp-6.2.0.ebuild new file mode 100644 index 000000000000..a00b0d8e16f1 --- /dev/null +++ b/sci-libs/coinor-csdp/coinor-csdp-6.2.0.ebuild @@ -0,0 +1,115 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit flag-o-matic multilib toolchain-funcs + +MY_PN="Csdp" +MY_P="${MY_PN}-${PV}" + +DESCRIPTION="COIN-OR C Library for Semi-Definite Programming" +HOMEPAGE="https://projects.coin-or.org/Csdp/" +SRC_URI="https://www.coin-or.org/download/source/${MY_PN}/${MY_P}.tgz -> ${P}.tar.gz" + +LICENSE="EPL-2.0" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" +IUSE="doc examples openmp" + +RDEPEND="virtual/blas + virtual/lapack" +DEPEND="${RDEPEND}" +BDEPEND="virtual/pkgconfig" + +PATCHES=( + "${FILESDIR}"/${PN}-6.2.0_toolchain-vars.patch +) + +S="${WORKDIR}"/${MY_P} + +_get_version_component_count() { + local cnt=( $(ver_rs 1- ' ') ) + echo ${#cnt[@]} || die +} + +static_to_shared() { + local libstatic=${1} + shift + local libname=$(basename ${libstatic%.a}) + local soname=${libname}$(get_libname $(ver_cut 1-2)) + 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" + + if [[ $(_get_version_component_count) -ge 1 ]] ; then + ln -s ${soname} ${libdir}/${libname}$(get_libname $(ver_cut 1)) || die + fi + + ln -s ${soname} ${libdir}/${libname}$(get_libname) || die + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]]; then + use openmp && tc-check-openmp + fi +} + +src_prepare() { + default + + append-cflags -DNOSHORTS -DUSEGETTIME -I../include + + if use openmp; then + append-cflags -DUSEOPENMP + + if [[ $(tc-getCC) == *icc* ]]; then + append-cflags -openmp + else + append-cflags -fopenmp + append-ldflags -fopenmp + fi + fi + + use amd64 && append-cflags -DBIT64 + + [[ $($(tc-getPKG_CONFIG) --libs blas) =~ atlas ]] && append-cflags -DUSEATLAS + + tc-export CC +} + +src_compile() { + emake CFLAGS="${CFLAGS} -fPIC" -C lib + local libs="$($(tc-getPKG_CONFIG) --libs blas lapack)" || die + static_to_shared lib/libsdp.a ${libs} + emake -C solver LIBS="${libs} -L../lib -lsdp -lm" + emake -C theta LIBS="${libs} -L../lib -lsdp -lm" +} + +src_test() { + LD_LIBRARY_PATH="${S}/lib" emake -C test +} + +src_install() { + dobin solver/csdp theta/{theta,graphtoprob,complement,rand_graph} + dolib.so lib/libsdp$(get_libname)* + insinto /usr/include/${PN} + doins include/* + dodoc AUTHORS README + use doc && dodoc doc/csdpuser.pdf + if use examples; then + docinto examples + dodoc example/* + fi +} |