# Contributor: Edward E. <develinthedetail@gmail.com>
# source: https://github.com/msys2/MINGW-packages/blob/a68642280eceb8fbc498d3e715063ce8f325b2f0/mingw-w64-libheif/PKGBUILD

_realname=libheif
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=1.12.0
pkgrel=9
pkgdesc="HEIF image decoder/encoder library and tools (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
url="https://github.com/strukturag/libheif"
license=('spdx:LGPL-3.0' 'MIT')
makedepends=("${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-gdk-pixbuf2"
             "${MINGW_PACKAGE_PREFIX}-autotools"
             "${MINGW_PACKAGE_PREFIX}-cc")
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
         "${MINGW_PACKAGE_PREFIX}-aom"
         "${MINGW_PACKAGE_PREFIX}-libde265"
         "${MINGW_PACKAGE_PREFIX}-libjpeg-turbo"
         "${MINGW_PACKAGE_PREFIX}-libpng"
         "${MINGW_PACKAGE_PREFIX}-libwinpthread-git"
         "${MINGW_PACKAGE_PREFIX}-x265")
source=("https://github.com/strukturag/libheif/releases/download/v${pkgver}/${_realname}-${pkgver}.tar.gz"
        "001-fix-pkgconfig-provide-includedir.patch"
        "002-cmake-enable-gdk-pixbuf.patch"
        "003-cmake-install-headers.patch"::"https://patch-diff.githubusercontent.com/raw/strukturag/libheif/pull/499.diff"
        "004-cmake-install-manpages.patch"::"https://patch-diff.githubusercontent.com/raw/strukturag/libheif/pull/500.diff"
        "005-cmake-install-gnome-thumb.patch"::"https://patch-diff.githubusercontent.com/raw/strukturag/libheif/pull/501.diff"
        "006-mingw-enable-wchar.patch"::"https://github.com/strukturag/libheif/commit/c4acdc562f89a5fae69f9a961421ca1ac2a7429d.diff"
        "010-fix-loading-alpha-image.patch"::"https://github.com/strukturag/libheif/commit/4795ba10abd233024d0536096182133fa06d9c3b.patch"
        "011-fix-loading-alpha-image.patch"::"https://github.com/strukturag/libheif/commit/c32f15512323960097b99c204535ec53d11fb355.patch"
        "012-fix-do-not-pad-16x16-AOM.patch"::"https://github.com/strukturag/libheif/commit/ec1dc464dc08517ecef7b675043886ec727eadb2.patch"
        "013-fix-enable-lossless-AOM.patch"::"https://github.com/strukturag/libheif/commit/b2612dd9c63f8835cf2047960b8cacd464a325a4.patch"
        "014-fix-RGB-to-YCbCr-chroma.patch"::"https://github.com/strukturag/libheif/commit/2c8d963dfc0b967e6c78259ba0a99185b27206d8.patch"
        "015-fix-RRGGBB-to-YCbCr-chroma.patch"::"https://github.com/strukturag/libheif/commit/ab0af732fd3c2ebf0211a0a072c76789c8d38d39.patch"
        "016-fix-RGB-to-YCbCr-chroma-2.patch"::"https://github.com/strukturag/libheif/commit/2dfc9b2c04ce77c0d85af37a4f66c0ee2dbe058d.patch"
        "017-fix-aom-signal-chroma-position.patch"::"https://github.com/strukturag/libheif/commit/487c3d821df79178edd18a62285449d8d1f70160.patch"
        "018-expose-aom-decoder-errors.patch"::"https://github.com/strukturag/libheif/commit/13c3d59be814a34ceb2ae12da1b6eab3cd85cf72.patch"
        "019-aom-all-intra.patch"::"https://github.com/strukturag/libheif/commit/4ec2ac35e2cd79e8594092f6e36b5eace19cefdf.patch"
        "020-fix-scaling-of-images.patch"::"https://github.com/strukturag/libheif/commit/0cd461e18b99d018f9adef731eec928781078afb.patch"
        "021-fix-clap-box-dimensions-1.diff"::"https://github.com/strukturag/libheif/commit/4193d80e87133b308205d30d234436592fc70c49.diff"
        "022-fix-clap-box-dimensions-2.patch"::"https://github.com/strukturag/libheif/commit/ca2473d9eca36697aa531f42209567cc663ceaee.patch"
        "023-fix-clap-box-dimensions-3.patch"::"https://github.com/strukturag/libheif/commit/2c4cb5712724b5617019dc749b91b0acd0f9ad7c.patch"
        "024-fix-avif-left-shift-ub.patch"::"https://github.com/strukturag/libheif/commit/82070385eca01f64c587e02c0a75d60386d308c3.patch"
        "025-fix-bitstream-potential-overflow.patch"::"https://github.com/strukturag/libheif/commit/67410c3ce2c8a210d42d02c790c3ac1f9791605a.patch"
        "026-fix-encoder-no-SPS-returned-1.patch"::"https://github.com/strukturag/libheif/commit/2611d39704bdb6bb37429e39660d9dedbdfff35a.patch"
        "027-fix-check-results-of-read.patch"::"https://github.com/strukturag/libheif/commit/5a20339c29831cd2f72903a1ca2ff88e458dc1c2.patch"
        "028-fix-encoder-no-SPS-returned-2.patch"::"https://github.com/strukturag/libheif/commit/98b867ea575ecce7039458b71f2c320742489e30.patch"
        "029-fix-nclx-avoid-division-by-zero.patch"::"https://github.com/strukturag/libheif/commit/9497e10168660138fd10a738179039c0e7d7ba6c.patch"
        "030-fix-wrong-copy-size.patch"::"https://github.com/strukturag/libheif/commit/11ffeffadd980f9f96019fe180fc1e81827e3790.patch")
sha256sums=('e1ac2abb354fdc8ccdca71363ebad7503ad731c84022cf460837f0839e171718'
            'd6bb42bdd884592d1edd3eb69ebc927de4fc329fbc05fab921b0aee23b68b124'
            '51012f7d84bd3d177839d99aaae2df388e42bd51a95bceac4329be81358895e2'
            '8944e9953b2924b581cf688a3dc7483cbd0f208a24dda81963e70a45db16fd48'
            '02e026708b01f2a86c6ddb9346fb7bd4cd9e43b5c0a598116255f2bdb1e5cc74'
            '38ae18671817313c58f7c33e337c1f82aaf483c07e9fda541750965d99ee6f07'
            '43702c66c3e9e530199c6f1d6809ff371e9a4ccb2a253df79eec687dad3de43f'
            '74b6ab5c85307944a292c8044bd8dee4645d413775f8c669b44b63a0cfe81436'
            '75ac6e6ca7cecf9bedeb23d21bc60cbc17bf5dcae1c82d39bf388f8d30c6f916'
            '0d2a3727e494cb328f5b786d4bb116d167026a86a709219768ab47ed4d2c73c8'
            'd9747b6191ea142df649166de7cfa4ddb4012530802906c5e0626aed20705325'
            '5c235e94a6e0ed644942ec9824110800566e750ba9a9a90e92a8d03dd520ae08'
            '3ba2ae48158b1362edcdd46b8ee56c88f93e540152da7408a429917ccf2bd5bd'
            'ab9b658197542bcc0d6ed28ebef1879da2b75bcb7ce8d267be90ee998649a523'
            '8eda9cf854cd4084a97b8a0c770bf183cc4f567e6a9e1f66288fa27957e26df3'
            '9dd1c14838b71b9e593649d36f979c0fea6a85692f591021e06285ec9c392d50'
            '98b1074874c5697254f74444a64dd00cfb15ecf5544d873c5c1f2c5cb11b602b'
            '81f2c5de8cbd80297208cfd54e95e6f7765c896365ef531ff8f38aaa4f4f6679'
            'dcb87aa66ea09848e007ce8fed65848b9028b1c7456634d62da690f9c5867195'
            'e6f107c77c8b8ffc00e12d37a11a29642b5db2aadd552fa7d7033c4368c689f2'
            'a6fde7081abe1fd5d3b9bc4e850cdbb16790d2105971111c86657696bad39438'
            '64d51a24cb26af69fbca98c8394cd1682b0d16eb9a50412635a20ee153e3372b'
            '368a8965118647a8e7ca6e9b454cac94b72f3b26711bfd3d371e274b59b94007'
            '7cbca7d0f8f6743d0997a3b5102a1397eb967261e96c8946ad70e195d93cc24f'
            'a07fc8974cf1f0634c158c72ac6c3263457c6d91a0e66143607c9ee2fcb72feb'
            '1e063aef2a871526e99247615d439bc7055034e443d5537d6702db09a470a9f9'
            '97fc5e57727d9ea47aa7dbdf2635afd40122ca1a0f9d44be228d3d14efd7c610'
            '1a5ea2b0afe73b233daa7a693a9891c0096565f6d72a65a135b05c88e839395a')

prepare() {
  cd "${srcdir}/${_realname}-${pkgver}"
  patch -Np1 -i "${srcdir}/001-fix-pkgconfig-provide-includedir.patch"
  patch -Np1 -i "${srcdir}/002-cmake-enable-gdk-pixbuf.patch"
  patch -Np1 -i "${srcdir}/003-cmake-install-headers.patch"
  patch -Np1 -i "${srcdir}/004-cmake-install-manpages.patch"
  patch -Np1 -i "${srcdir}/005-cmake-install-gnome-thumb.patch"
  patch -Np1 -i "${srcdir}/006-mingw-enable-wchar.patch"
  patch -Np1 -i "${srcdir}/010-fix-loading-alpha-image.patch"
  patch -Np1 -i "${srcdir}/011-fix-loading-alpha-image.patch"
  patch -Np1 -i "${srcdir}/012-fix-do-not-pad-16x16-AOM.patch"
  patch -Np1 -i "${srcdir}/013-fix-enable-lossless-AOM.patch"
  patch -Np1 -i "${srcdir}/014-fix-RGB-to-YCbCr-chroma.patch"
  patch -Np1 -i "${srcdir}/015-fix-RRGGBB-to-YCbCr-chroma.patch"
  patch -Np1 -i "${srcdir}/016-fix-RGB-to-YCbCr-chroma-2.patch"
  patch -Np1 -i "${srcdir}/017-fix-aom-signal-chroma-position.patch"
  patch -Np1 -i "${srcdir}/018-expose-aom-decoder-errors.patch"
  patch -Np1 -i "${srcdir}/019-aom-all-intra.patch"
  patch -Np1 -i "${srcdir}/020-fix-scaling-of-images.patch"
  patch -Np1 -i "${srcdir}/021-fix-clap-box-dimensions-1.diff"
  patch -Np1 -i "${srcdir}/022-fix-clap-box-dimensions-2.patch"
  patch -Np1 -i "${srcdir}/023-fix-clap-box-dimensions-3.patch"
  patch -Np1 -i "${srcdir}/024-fix-avif-left-shift-ub.patch"
  patch -Np1 -i "${srcdir}/025-fix-bitstream-potential-overflow.patch"
  patch -Np1 -i "${srcdir}/026-fix-encoder-no-SPS-returned-1.patch"
  patch -Np1 -i "${srcdir}/027-fix-check-results-of-read.patch"
  patch -Np1 -i "${srcdir}/028-fix-encoder-no-SPS-returned-2.patch"
  patch -Np1 -i "${srcdir}/029-fix-nclx-avoid-division-by-zero.patch"
  patch -Np1 -i "${srcdir}/030-fix-wrong-copy-size.patch"
}

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

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

  # Keep "-DX265_API_IMPORTS" flag due to https://github.com/strukturag/libheif/issues/357
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
    ${MINGW_PREFIX}/bin/cmake \
      -GNinja \
      -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
      "${extra_config[@]}" \
      -DBUILD_SHARED_LIBS=ON \
      -DWITH_RAV1E=OFF \
      -DWITH_DAV1D=OFF \
      -DX265_CFLAGS="-DX265_API_IMPORTS" \
      ../${_realname}-${pkgver}

  ${MINGW_PREFIX}/bin/cmake --build .

  # Build pkgconfig file using autoconf because
  # CMake generates it without ${prefix} variable

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

  ../${_realname}-${pkgver}/configure \
    --prefix=${MINGW_PREFIX} \
    --build=${MINGW_CHOST} \
    --host=${MINGW_CHOST}
}

package() {
  cd "${srcdir}"/build-${MSYSTEM}

  DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --build . --target install

  cp -v "${srcdir}"/build-${MSYSTEM}-pkgconfig/libheif.pc "${pkgdir}"${MINGW_PREFIX}/lib/pkgconfig

  install -Dm644 "${srcdir}/${_realname}-${pkgver}/COPYING" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/COPYING"
  install -Dm644 "${srcdir}/${_realname}-${pkgver}/examples/COPYING" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/COPYING-examples"
}