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

_realname=setuptools
pkgbase=mingw-w64-python-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-python-${_realname}")
provides=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}")
conflicts=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}"
           "${MINGW_PACKAGE_PREFIX}-python2-setuptools<42.0.2")
replaces=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}")
pkgver=57.0.0
pkgrel=1
pkgdesc="Easily download, build, install, upgrade, and uninstall Python packages (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
license=('PSF')
url="https://pypi.org/pypi/setuptools"
depends=("${MINGW_PACKAGE_PREFIX}-python")
optdepends=("${MINGW_PACKAGE_PREFIX}-python-certifi: Mozilla's CA Bundle support"
            "${MINGW_PACKAGE_PREFIX}-python-wincertstore: Windows' cert store support")
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc")
source=(${_realname}-${pkgver}.tar.gz::https://pypi.org/packages/source/${_realname::1}/${_realname}/${_realname}-${pkgver}.tar.gz
        '0001-mingw-python-fix.patch'
        '0002-Allow-usr-bin-env-in-script.patch'
        '0003-MinGW-w64-Look-in-same-dir-as-script-for-exe.patch'
        '0005-execv-warning.patch'
        '0006-fix-tests-path.patch'
        '0007-windows-arm64.patch'
)
checkdepends=(
  "${MINGW_PACKAGE_PREFIX}-python-pytest"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-checkdocs"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-flake8"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-cov"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-enabler"
  "${MINGW_PACKAGE_PREFIX}-python-mock"
  "${MINGW_PACKAGE_PREFIX}-python-virtualenv"
  "${MINGW_PACKAGE_PREFIX}-python-wheel"
  "${MINGW_PACKAGE_PREFIX}-python-paver"
  "${MINGW_PACKAGE_PREFIX}-python-pip"
  "${MINGW_PACKAGE_PREFIX}-python-jaraco.envs"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-xdist"
  "${MINGW_PACKAGE_PREFIX}-python-sphinx"
  "${MINGW_PACKAGE_PREFIX}-python-jaraco.path" 
  "${MINGW_PACKAGE_PREFIX}-python-pytest-black"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-fixture-config"
  "${MINGW_PACKAGE_PREFIX}-python-pytest-virtualenv"
  #"${MINGW_PACKAGE_PREFIX}-python-pytest-mypy"
  'git'
)
sha256sums=('401cbf33a7bf817d08014d51560fc003b895c4cdc1a5b521ad2969e928a07535'
            '7b196884ac0151801f9638dabbf9a789fa9070a3b07a4c9e625c5523e8d47387'
            'fa54581e3dddb9f4edd332dedbc101f48939a9ca5878e13cf9cf9b3408bc8c22'
            '39503256652c7c23ce07e26539e8123d269eb5c09f5d9b07e5784b2d7fb8c96f'
            'a356b0663f67a296624d1b178b42437b380b48a4bbe05a560d3bf29e93a4c623'
            'dbdd96a7ead797b2db9f02dfe19ce853d3775337ccf8fd836377fe3c2a9d1c24'
            'e6f9b6fc068a449c433150d936118114d50a71afb01b71291065d6a811d817e7')

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

  patch -p1 -i ${srcdir}/0001-mingw-python-fix.patch
  patch -p1 -i ${srcdir}/0002-Allow-usr-bin-env-in-script.patch
  patch -p1 -i ${srcdir}/0003-MinGW-w64-Look-in-same-dir-as-script-for-exe.patch
  patch -p1 -i ${srcdir}/0005-execv-warning.patch
  patch -p1 -i ${srcdir}/0006-fix-tests-path.patch
  patch -p1 -i ${srcdir}/0007-windows-arm64.patch

  rm -f setuptools/{gui,cli}{-32,-64,-arm64,}.exe
  local _gui_args="-DGUI=1 -mwindows -O2"
  local _cli_args="-DGUI=0 -O2"
  if check_option "strip" "y"; then
    _gui_args+=" -s"
    _cli_args+=" -s"
  fi
  case "${MINGW_CHOST}" in
    i686-w64-mingw32)
      gcc $_cli_args -o setuptools/cli-32.exe launcher.c
      gcc $_gui_args -o setuptools/gui-32.exe launcher.c
      cp setuptools/cli-32.exe setuptools/cli.exe
      cp setuptools/gui-32.exe setuptools/gui.exe
      ;;
    x86_64-w64-mingw32)
      gcc $_cli_args -o setuptools/cli-64.exe launcher.c
      gcc $_gui_args -o setuptools/gui-64.exe launcher.c
      ;;
    aarch64-w64-mingw32)
      gcc $_cli_args -o setuptools/cli-arm64.exe launcher.c
      gcc $_gui_args -o setuptools/gui-arm64.exe launcher.c
      ;;
    *)
      echo "Unsupported CHOST ${MINGW_CHOST}" && false
      ;;
  esac

  cd "${srcdir}"
  cp -r setuptools-${pkgver} setuptools-python-${CARCH}
}

build() {
  cd "${srcdir}"/setuptools-python-${CARCH}

  ${MINGW_PREFIX}/bin/python setup.py build
}

check() {
  cd "${srcdir}"/setuptools-python-${CARCH}

  ${MINGW_PREFIX}/bin/python -m pytest || true
}

package() {
  cd "${srcdir}/setuptools-python-${CARCH}"

  MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
    ${MINGW_PREFIX}/bin/python setup.py install --prefix=${MINGW_PREFIX} --root="${pkgdir}" --optimize=1 --skip-build

  install -Dm644 ${srcdir}/${_realname}-${pkgver}/LICENSE ${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE
}
