# Maintainer : eolianoe <eolianoe At GoogleMAIL DoT CoM>
# Contributor: Michele Mocciola <mickele>
# Contributor: Guillaume Dollé <dolle dot guillaume at gmail dot com >

pkgname=mumps-seq
_pkgname=mumps
_PKGNAME=MUMPS
pkgver=5.9.1
pkgrel=2
pkgdesc="Sparse solver library using Gaussian elimination (sequential version)"
url="http://mumps-solver.org"
license=('custom')
depends=('gcc-libs' 'lapack' 'lapack64' 'metis')
makedepends=(gcc-fortran)
arch=('aarch64' 'x86_64')
source=("http://mumps-solver.org/${_PKGNAME}_${pkgver}.tar.gz")
sha256sums=('659c9b57646b5a003ac618baa1faf9dd2044e46c732b3daaccbc7158003e1b46')
options=(staticlibs '!lto')

prepare() {
  (cd ${_PKGNAME}_${pkgver}
   cp Make.inc/Makefile.G95.SEQ Makefile.inc)
  cp -r ${_PKGNAME}_${pkgver} ${_PKGNAME}-64_${pkgver}
}

build() {
  (
    cd ${_PKGNAME}_${pkgver}
    FFLAGS+=' -fallow-argument-mismatch'
    export FFLAGS

    make_args=(OPTF=-O3
               OPTL=-O3
               OPTC=-O3
               CDEFS=-DAdd_
               LMETIS="-lmetis"
               ORDERINGSF="-Dpord -Dmetis"
               LIBEXT_SHARED=".so"
               SHARED_OPT='-shared'
               SONAME="-soname"
               PLAT="_seq"
               CC="gcc -fPIC ${CFLAGS}"
               FC="gfortran -fPIC ${FFLAGS}"
               FL="gfortran -fPIC"
               RANLIB="ranlib"
               LIBBLAS="-lblas"
               LAPACK="-llapack")

    make allshared "${make_args[@]}"
  )

  (
    cd ${_PKGNAME}-64_${pkgver}
    FFLAGS+=' -fallow-argument-mismatch'
    for sym in isamax idamax ilaenv slamch dlamch \
                      saxpy scopy sgemm sgemv sgesvd slarfg sorgqr sormqr sscal \
                      sswap strsv strsm strtrs snrm2 \
                      daxpy dcopy dgemm dgemv dgesvd dlarfg dorgqr dormqr dscal \
                      dswap dtrsv dtrsm dtrtrs dnrm2 \
                      caxpy ccopy cgemm cgemv cgesvd clarfg cungqr cunmqr cscal \
                      cswap ctrsv ctrsm ctrtrs scnrm2 \
                      zaxpy zcopy zgemm zgemv zgesvd zlarfg zungqr zunmqr zscal \
                      zswap ztrsv ztrsm ztrtrs dznrm2
    do
      FFLAGS+=" -D${sym}=${sym}_64"
      CFLAGS+=" -D${sym}_=${sym}_64_"
      CXXFLAGS+=" -D${sym}_=${sym}_64_"
    done
    export FFLAGS

    make_args=(OPTF="-O3 -fdefault-integer-8 -ffixed-line-length-none"
               OPTL=-O3
               OPTC="-O3 -DINTSIZE64 -DMETIS_USE_LONGINDEX"
               CDEFS=-DAdd_
               IMETIS="-I/usr/lib/metis_Int64_Real32/include"
               LMETIS="-lmetis_Int64_Real32"
               ORDERINGSF="-Dpord -Dmetis"
               LIBEXT_SHARED=".so"
               SHARED_OPT='-shared'
               SONAME="-soname"
               PLAT="64_seq"
               CC="gcc -fPIC ${CFLAGS}"
               FC="gfortran -fPIC ${FFLAGS}"
               FL="gfortran -fPIC"
               RANLIB="ranlib"
               LIBBLAS="-lblas64"
               LAPACK="-llapack64")

    make allshared "${make_args[@]}"
  )
}

package(){
  (cd ${_PKGNAME}_${pkgver}

   # Install all headers
   install -dm755 "${pkgdir}/usr/include/mumps-seq"
   install -Dm644 -- include/*.h "${pkgdir}/usr/include/mumps-seq"

   # Install all libraries
   install -dm755 "${pkgdir}/usr/lib"
   install -Dm755 -- lib/*.so "${pkgdir}/usr/lib"

   # Install mpiseq headers
   install -dm755 "${pkgdir}/usr/include/mpiseq"
   install -Dm644 -- libseq/*.h "${pkgdir}/usr/include/mpiseq"

   # Install mpiseq libraries
   install -m755 libseq/libmpiseq_seq.so "${pkgdir}/usr/lib"
   ln -sf libmpiseq_seq.so "${pkgdir}/usr/lib/libmpiseq.so"

   # Install license
   install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"

   # Install examples
   install -dm755 "${pkgdir}/usr/share/doc/mumps-seq/examples"
   cp -r examples/* "${pkgdir}/usr/share/doc/mumps-seq/examples"
   rm -- "${pkgdir}/usr/share/doc/mumps-seq/examples/"*.o)

  (cd ${_PKGNAME}-64_${pkgver}

   # Install all headers
   install -dm755 "${pkgdir}/usr/include/mumps-seq64"
   install -Dm644 -- include/*.h "${pkgdir}/usr/include/mumps-seq64"

   # Install all libraries
   install -dm755 "${pkgdir}/usr/lib"
   install -Dm755 -- lib/*.so "${pkgdir}/usr/lib"

   # Install mpiseq headers
   install -dm755 "${pkgdir}/usr/include/mpiseq64"
   install -Dm644 -- libseq/*.h "${pkgdir}/usr/include/mpiseq64"

   # Install mpiseq libraries
   install -m755 libseq/libmpiseq64_seq.so "${pkgdir}/usr/lib"
   ln -sf libmpiseq64_seq.so "${pkgdir}/usr/lib/libmpiseq64.so")
}
