# Maintainer: Ray Donnelly <mingw.android@gmail.com>

_realname=suitesparse
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-suitesparse")
pkgver=6.0.0
pkgrel=2
pkgdesc='A suite of sparse matrix algorithms (mingw-w64)'
url="http://faculty.cse.tamu.edu/davis/suitesparse.html"
license=('GPL')
arch=('any')
source=("http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${pkgver}.tar.gz"
        "0001-mingw-w64-Use-a-not-lib-as-AR_TARGET-extension.patch"
        "0002-mingw-w64-Set-SO_OPTS--shared-move-dlls-create-import-libs.patch"
        "0003-mingw-w64-no-CUDA.patch"
        "0004-mingw-w64-install-static-libs.patch"
        "0005-graphblas-dll-install.patch")
depends=("${MINGW_PACKAGE_PREFIX}-openblas"
         "${MINGW_PACKAGE_PREFIX}-metis")
makedepends=("${MINGW_PACKAGE_PREFIX}-cmake")
options=('staticlibs')
sha256sums=('27241827bf6f3f39f4f6070969455a15578851086c9552747b255e0edb5a0ced'
            '1c848ba4fd5b07d65e0f8e9f6d5153efc51292d0d487d446afbdacf25e4fd8f7'
            '6f6a96a801c7da927b1ebed309ec067b4aa8408a79a9de6e08b853413e793a53'
            'ba683605113eac73eaa63cb1b24fde8110f395c888f5331870222f59ecdc354a'
            'ca8aa0a8c3828ae7e2b5ae53c9e5c5c581d613f11763c23d648b38d8c8909485'
            '3d601fff9b03baa24b584cc9c8fe06640e68936f33113777d32899556ad2b798')

prepare() {
  cd "${srcdir}"/SuiteSparse
  patch -p1 -i "${srcdir}"/0001-mingw-w64-Use-a-not-lib-as-AR_TARGET-extension.patch
  patch -p1 -i "${srcdir}"/0002-mingw-w64-Set-SO_OPTS--shared-move-dlls-create-import-libs.patch
  patch -p1 -i "${srcdir}"/0003-mingw-w64-no-CUDA.patch
  patch -p1 -i "${srcdir}"/0004-mingw-w64-install-static-libs.patch
  patch -p1 -i "${srcdir}"/0005-graphblas-dll-install.patch
}

build() {
  [[ -d "${srcdir}"/build-${CARCH} ]] && rm -rf "${srcdir}"/build-${CARCH}
  cp -rf "${srcdir}"/SuiteSparse build-${CARCH}

  cd "${srcdir}"/build-${CARCH}

  # This avoids needing to use a very large patch (we still get diffs but
  # that is down to a bug in format string handling somewhere where-by an
  # extra 0-padding value is emitted in exponents of scientific floats).
  [[ -d "${PWD}"/bin ]] || mkdir "${PWD}"/bin
  echo "#!/usr/bin/env bash"                         > "${PWD}"/bin/diff
  echo "/usr/bin/diff --strip-trailing-cr \"\$@\""  >> "${PWD}"/bin/diff

  # This avoids needing to use another very large patch.
  [[ -d "${PWD}"/lib ]] || mkdir "${PWD}"/lib
  ar cru "${PWD}"/lib/librt.a

  PATH=${PWD}/bin:"${PATH}"          \
  CC=gcc                             \
  CXX=g++                            \
  CFLAGS="-DLONGBLAS='long long'"    \
  CXXFLAGS="-DLONGBLAS='long long'"  \
  LDFLAGS="-L${PWD}/lib"             \
  MY_METIS_LIB=-lmetis               \
  BLAS=-lopenblas                    \
  LAPACK=-lopenblas                  \
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
    make CMAKE_OPTIONS="-G\"MSYS Makefiles\" -DCMAKE_INSTALL_PREFIX=\"${MINGW_PREFIX}\" -DCMAKE_BUILD_TYPE=Release"
}

package() {
  mkdir -p "${pkgdir}"${MINGW_PREFIX}/{bin,lib,include} || true

  cd "${srcdir}"/build-${CARCH}

  PATH=${PWD}/bin:"${PATH}"               \
  CC=gcc                                  \
  CXX=g++                                 \
  CFLAGS="-DLONGBLAS='long long'"         \
  CXXFLAGS="-DLONGBLAS='long long'"       \
  MY_METIS_LIB=-lmetis                    \
  BLAS=-lopenblas                         \
  LAPACK=-lopenblas                       \
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  make install                          \
    INSTALL="${pkgdir}"${MINGW_PREFIX}  \
    DESTDIR="${pkgdir}"                 \
    CMAKE_OPTIONS="-G\"MSYS Makefiles\" -DCMAKE_INSTALL_PREFIX=\"${MINGW_PREFIX}\" -DCMAKE_BUILD_TYPE=Release"
}
