# Maintainer: Alexey Pavlov <alexpux@gmail.com>

_realname=openexr
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-ilmbase"
         "${MINGW_PACKAGE_PREFIX}-${_realname}"
         "${MINGW_PACKAGE_PREFIX}-pyilmbase")
pkgver=2.5.7
pkgrel=1
pkgdesc="Openexr library for EXR images (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
url="https://www.openexr.com/"
license=("custom")
makedepends=("${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-boost"
             "${MINGW_PACKAGE_PREFIX}-fltk"
             "${MINGW_PACKAGE_PREFIX}-gcc"
             "${MINGW_PACKAGE_PREFIX}-pkg-config"
             "${MINGW_PACKAGE_PREFIX}-python"
             "${MINGW_PACKAGE_PREFIX}-python-numpy")
options=('staticlibs' 'strip')
source=(${_realname}-${pkgver}.tar.gz::https://github.com/openexr/openexr/archive/v${pkgver}.tar.gz
        0001-mingw-w64-fix.patch
        0002-openexr-2.1.0-headers.patch
        0005-fix-dirs-in-pkgconfig.patch
        0006-cmake-soversion.patch
        0009-win-dwalookups.patch
        0012-exports.patch
        0013-no-py2.patch)
sha256sums=('36ecb2290cba6fc92b2ec9357f8dc0e364b4f9a90d727bf9a57c84760695272d'
            '68bedb3a4acc6f62b1486c7c47c9025f5ce4131468e17445f0c716545ddd00c1'
            '460dcfd86b407241382ed4ba5a003ae251c9fdce68e7cfdea021b09898ad2705'
            'fba4e95d6921bcd253c8c644063b4c1334c84761a2a2232590d442ca81f8d7cd'
            '313b0c98abdd792b8213ec9685a5a7b095ec69faa528f6fd0946f23576b6ef07'
            '2ca841425ae676f75fa714a16f0124272224147fe40ea507ccc4bf74477f51ab'
            'da9e92f066e9b45583f2b12678a9f49fcbb7fa1f06805d9b472d39fa5f18a629'
            '47e4e068439a1adaca41d7d7f966f65f1ae68b4dee1d1dd7c5778256edc3b3e8')

prepare(){
  cd "${srcdir}/${_realname}-${pkgver}"

  sed -i 's/#define ZLIB_WINAPI/\/\/#define ZLIB_WINAPI/g' OpenEXR/IlmImf/ImfZipCompressor.cpp
  sed -i 's/#define ZLIB_WINAPI/\/\/#define ZLIB_WINAPI/g' OpenEXR/IlmImf/ImfPxr24Compressor.cpp

  patch -p1 -i ${srcdir}/0001-mingw-w64-fix.patch
  patch -p1 -i ${srcdir}/0002-openexr-2.1.0-headers.patch
  #patch -p1 -i ${srcdir}/0005-fix-dirs-in-pkgconfig.patch
  patch -p1 -i ${srcdir}/0006-cmake-soversion.patch
  patch -p1 -i ${srcdir}/0009-win-dwalookups.patch
  patch -p1 -i ${srcdir}/0012-exports.patch
  patch -p1 -i ${srcdir}/0013-no-py2.patch
}

build() {
  declare -a extra_config
  if check_option "debug" "n"; then
    extra_config+=("-DCMAKE_BUILD_TYPE=Release")
  else
    extra_config+=("-DCMAKE_BUILD_TYPE=Debug")
  fi

  [[ -d "build-${MINGW_CHOST}" ]] && rm -rf "build-${MINGW_CHOST}"
  mkdir -p "${srcdir}/build-${MINGW_CHOST}" && cd "${srcdir}/build-${MINGW_CHOST}"

  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake \
    -G"MSYS Makefiles" \
    ${extra_config} \
    -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
    -DBUILD_SHARED_LIBS=ON \
    -DPython_EXECUTABLE=${MINGW_PREFIX}/bin/python.exe \
    -DPython_ROOT_DIR=${MINGW_PREFIX} \
    -DPython_FIND_REGISTRY=NEVER \
    -DPython3_EXECUTABLE=${MINGW_PREFIX}/bin/python.exe \
    -DPython3_ROOT_DIR=${MINGW_PREFIX} \
    -DPython3_FIND_REGISTRY=NEVER \
    ../${_realname}-${pkgver}

  make
}

package_ilmbase() {
  pkgdesc="Base libraries from ILM for OpenEXR (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs")

  cd "${srcdir}/build-${MINGW_CHOST}/IlmBase"
  make DESTDIR=${pkgdir} install
}

package_openexr() {
  pkgdesc="An high dynamic-range image file format library (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-ilmbase=${pkgver}"
           "${MINGW_PACKAGE_PREFIX}-zlib")

  cd "${srcdir}/build-${MINGW_CHOST}/OpenEXR"
  make DESTDIR=${pkgdir} install
}

package_pyilmbase() {
  pkgdesc="Python bindings for OpenEXR library (mingw-w64)"
  depends=("${MINGW_PACKAGE_PREFIX}-openexr=${pkgver}"
           "${MINGW_PACKAGE_PREFIX}-boost"
           "${MINGW_PACKAGE_PREFIX}-python-numpy")

  cd "${srcdir}/build-${MINGW_CHOST}/PyIlmBase"
  make DESTDIR=${pkgdir} install
  
  # Install python modules
  local _py3ver=$(${MINGW_PREFIX}/bin/python -c "import sys;sys.stdout.write('.'.join(map(str, sys.version_info[:2])))")

  mkdir -p ${pkgdir}${MINGW_PREFIX}/lib/python${_py3ver}/site-packages
  cp ${srcdir}/build-${MINGW_CHOST}/python${_py3ver//./_}/*.pyd ${pkgdir}${MINGW_PREFIX}/lib/python${_py3ver}/site-packages/
}

# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
# vim: set ft=bash :

# generate wrappers
for _name in "${pkgname[@]}"; do
  _short="package_${_name#${MINGW_PACKAGE_PREFIX}-}"
  _func="$(declare -f "${_short}")"
  eval "${_func/#${_short}/package_${_name}}"
done
# template end;
