# Maintainer: Alexey Pavlov <Alexpux@gmail.com>
# Contributor: Ray Donnelly <mingw.android@gmail.com>

# Note: I would like to update to 59.1 but I found
# putil.cpp: In function 'const char* uprv_getDefaultLocaleID_59d()':
# putil.cpp:1733:86: error: 'GetUserDefaultLocaleName' was not declared in this sc           ope
# int length = GetUserDefaultLocaleName(windowsLocale, UPRV_LENGTHOF(windowsL           ocale));

_realname=icu
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}" "${MINGW_PACKAGE_PREFIX}-${_realname}-debug-libs")
pkgver=58.2
pkgrel=2
arch=('any')
pkgdesc="International Components for Unicode library (mingw-w64)"
arch=('any')
url="http://www.icu-project.org/"
license=('custom:icu')
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs")
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc")
# There's no point adding 'debug' to options as both
# debug and release packages are built regardless.
options=('!buildflags' 'staticlibs' 'strip')
source=("http://download.icu-project.org/files/icu4c/${pkgver}/icu4c-${pkgver//./_}-src.tgz"
        0004-move-to-bin.mingw.patch
        0007-actually-move-to-bin.mingw.patch
        0008-data-install-dir.mingw.patch
        0009-fix-bindir-in-config.mingw.patch
        0010-msys-rules-for-makefiles.mingw.patch
        0011-sbin-dir.mingw.patch
        0012-libprefix.mingw.patch
        0014-mingwize-pkgdata.mingw.patch
        0015-debug.mingw.patch
        0016-icu-pkgconfig.patch
        0017-icu-config-versioning.patch
        0020-workaround-missing-locale.patch)
sha256sums=('2b0a4410153a9b20de0e20c7d8b66049a72aef244b53683d0d7521371683da0c'
            '314765fc244e52b8a077f6470f2bbb21c6954d649481af6d85b14af13717f7a8'
            'ae73db58e714857f544f9e40de8fc6847f03c41346d5a8f42dd313ec99fc1ba9'
            '2038881890542797fe1fe9a384cf2bb6c5504b18fb26eab1368f5cb0e6f7f7af'
            'b30a05dbd9e8c70f1c3f6e119fa386925200a31cc9cab327b7affd6e07572842'
            '2adfd968379888d919f0dd4e0379cef7b744ba56d98216b82372ed4cd00a2592'
            'b05d8f1700904454329402178366ce2dd254d9afa76dc8239bfc126d7ff42800'
            'c9299d76c95532abde64084a6cc9e1964adff086ac4c6229b20e02a523e561a7'
            'ac63e11e11fb7c849fbeff0a0008a49942a1e19ffe29385aa70248614c7ffd4d'
            'd1745b9d69729cb318cc329847160b50129621f98774a640726a7affd4b2bfd2'
            'f895436a5a0fe0ef95cf5caa748ace952046a901ecf2f5d5b415240b691de2fb'
            '88f808278e35c392ff1a0c416793df7743226b493013c26d5a1872a4dbad3326'
            'd31c4451cb9912e8caec58de8cec1940b2509b035b926bd0d993459c1b3afd66')

# Helper macros to help make tasks easier #
apply_patch_with_msg() {
  msg2 "Applying $1"
  patch -Nbp1 -i "${srcdir}"/$1
}

del_file_exists() {
  for _fname in "$@"
  do
    if [ -f $_fname ]; then
      rm -rf $_fname
    fi
  done
}
# =========================================== #

prepare() {
  cd "${srcdir}/icu"

  apply_patch_with_msg 0004-move-to-bin.mingw.patch
  apply_patch_with_msg 0007-actually-move-to-bin.mingw.patch
  apply_patch_with_msg 0008-data-install-dir.mingw.patch
  apply_patch_with_msg 0009-fix-bindir-in-config.mingw.patch
  apply_patch_with_msg 0010-msys-rules-for-makefiles.mingw.patch
  apply_patch_with_msg 0011-sbin-dir.mingw.patch
  apply_patch_with_msg 0012-libprefix.mingw.patch
  apply_patch_with_msg 0014-mingwize-pkgdata.mingw.patch
  apply_patch_with_msg 0015-debug.mingw.patch
  apply_patch_with_msg 0016-icu-pkgconfig.patch
  apply_patch_with_msg 0017-icu-config-versioning.patch
  apply_patch_with_msg 0020-workaround-missing-locale.patch

  cd source
  autoreconf -vfi
}

build() {
  local -a extra_config
  CXXFLAGS+=" -DU_USE_STRTOD_L=0" # breaks on Windows XP
  #CXXFLAGS+=" -D_WIN32_WINNT=0x0601"
  cd "${srcdir}/icu/"
  # For ICU we ignore the options for debug above and always
  # build both debug and release (and static and shared).
  # This is because ICU people want the debug libraries be
  # suffixed with 'd' and e.g. Qt-Project go along with this
  # (though only for the static variant, oddly, see:
  #   qtbase/config.tests/unix/icu/icu.pro
  for _variant in debug release; do
    [[ -d build-${CARCH}-${_variant} ]] && rm -rf build-${CARCH}-${_variant}
    if [ "${_variant}" = "debug" ]; then
      extra_config=( --enable-debug )
      extra_config+=( --with-library-suffix=d )
    else
      extra_config=( --enable-release )
    fi
    cp -rf source build-${CARCH}-${_variant}
    pushd build-${CARCH}-${_variant}
    ./configure \
      --prefix=${MINGW_PREFIX} \
      --build=${MINGW_CHOST} \
      --host=${MINGW_CHOST} \
      --target=${MINGW_CHOST} \
      --disable-rpath \
      --enable-shared \
      --enable-static \
      "${extra_config[@]}"
    make
    popd
  done
}

check() {
  for _variant in debug release; do
    pushd "${srcdir}/icu/build-${CARCH}-${_variant}"
    PATH=${srcdir}/icu/build-${CARCH}/bin:${srcdir}/icu/build-${CARCH}/lib:$PATH \
    make V=1 -k check
    popd
  done
}

package_icu() {
  pushd "${srcdir}/icu/build-${CARCH}-release"
  make install DESTDIR="${pkgdir}"

  mv "${pkgdir}${MINGW_PREFIX}"/lib/*.dll "${pkgdir}${MINGW_PREFIX}"/bin/
  mv "${pkgdir}${MINGW_PREFIX}"/bin/*.a "${pkgdir}${MINGW_PREFIX}"/lib/
  pushd "${pkgdir}${MINGW_PREFIX}"/bin > /dev/null
    # fix installation directory
    mv libicu*${pkgver%%.*}.dll "${pkgdir}${MINGW_PREFIX}"/lib/
    # remove unversioned DLL symlinks
    rm -f *.dll
    # move dlls back to bin
    mv "${pkgdir}${MINGW_PREFIX}"/lib/*.dll "${pkgdir}${MINGW_PREFIX}"/bin/
  popd > /dev/null
}

package_icu-debug-libs() {
  options=('debug' '!strip')
  pushd "${srcdir}/icu/build-${CARCH}-debug"
  make install DESTDIR="${pkgdir}"

  mv "${pkgdir}${MINGW_PREFIX}"/lib/*.dll "${pkgdir}${MINGW_PREFIX}"/bin/
  mv "${pkgdir}${MINGW_PREFIX}"/bin/*.a "${pkgdir}${MINGW_PREFIX}"/lib/
  pushd "${pkgdir}${MINGW_PREFIX}"/bin > /dev/null
    # fix installation directory
    mv libicu*${pkgver%%.*}.dll "${pkgdir}${MINGW_PREFIX}"/lib/
    # remove unversioned DLL symlinks
    rm -f *.dll
    # move dlls back to bin
    mv "${pkgdir}${MINGW_PREFIX}"/lib/*.dll "${pkgdir}${MINGW_PREFIX}"/bin/
  popd > /dev/null

  # Remove bits that are also in the main package.
  # TODO :: Maybe move the pkg-config files to 'd' suffixed variants?
  rm -rf "${pkgdir}${MINGW_PREFIX}"/{include,sbin,share,lib/pkgconfig}
  rm -rf "${pkgdir}${MINGW_PREFIX}"/bin/*.exe
  rm -rf "${pkgdir}${MINGW_PREFIX}"/bin/icu-config
}

package_mingw-w64-i686-icu() {
  package_icu
}

package_mingw-w64-i686-icu-debug-libs() {
  package_icu-debug-libs
}

package_mingw-w64-x86_64-icu() {
  package_icu
}

package_mingw-w64-x86_64-icu-debug-libs() {
  package_icu-debug-libs
}
